Archive | Development RSS feed for this section

PHP-MySQL Performancesteigerung

22 Jan

hallöle,

Markus S. hat mich von ein paar Tagen auf eine coole Sache aufmerksam gemacht. Voraussetzung dafür ist, dass Datenbank und Webserver auf der gleichen Maschine liegen!

Wenn man also eine Datenbankverbindung (z.B. via PHP) aufbauen möchte, trägt man im normalfall “localhost” ein. Dadurch wird die Anfrage über die Netzwerkkarte an sich selbst geschickt. Leider ergibt dies meist eine kleine Parsing-Time von ca. 0-3 Sekunden – je nach Scriptgröße. Sein Tipp hier: auf den Socket verweisen! Soll heißen, dass man statt “localhost” direkt den Pfad des Sockets an gibt, zb.: “:/var/lib/mysql/mysql.sock” Bsp.:

mysql_connect(“:/var/lib/mysql/mysql.sock”, “user”, “passwd”);

Wichtig: Der Pfad des Sockets muss absolut sein und muss einen Doppelpunkt vor dem Pfad haben.

Ihr könnts ja mal ausprobieren. Mir hat es aber doch sichtbar etwas gebracht, vor allem bei Wordpress!

Neuer Server

29 Okt

Neuer Server

Hey,

nachdem ich vor wenigen Tagen von einer Wordpress-Optimierung gesprochen habe, habe ich gemerkt, dass auch die beste Ausnutzung der Ressourcen nicht zu meinem Ziel führten. Bei ca. 700MB RAM von Server4You ist einfach nicht mehr zu machen.

Ich habe mich mal im Internet schlau gemacht und nach einem neuen Anbieter ausschau gehalten. Erst fiel mir der Provider Hosteurope in die Hände, welcher durchweg gute Bewertungen hat. Auch die Preise sind durchaus okay. Allerdings habe ich mich doch für einen Server von Netcup.de entschieden und ich muss sagen, dass der Server mit bisher sehr gut gefällt. Das einzige, was nervt, ist dass man auf 3rd-Party Administrationstools wie z.B. SysCP zurückgreifen muss. Wenn man Confixx verwenden möchte, kostet das 8,- Euro Aufschlag! Autsch!

Klarer Vorteil daher für Server4You, da dort bei jedem Server eine Plesk Lizenz dabei ist.

Ich werde mir jetzt mal den Server genauer angucken und schauen, inwiefern man den vllt. noch etwas tweaken kann…logo_klein

Wordpress-Optimierung

22 Okt

“A Never Ending Story”… könnte man schon fast sagen. Ich betreibe einen VServer bei Server4You um ein paar Webseiten laufen zu lassen. Der Server an sich ist ganz gut und erfüllt seine Dienste. Installiert ist CentOS (mit Plesk) sowie httpd 2.2.14, PHP 5.2.11 und MySQL 5. Alles zusammen eine recht stabile Mischung, aber das kleine i-Tüpfelchen fehlt – Die Performance!

Ein leidiges Thema, vor allen wenn es um Wordpress geht, aber auch dies lässt sich mit ein wenig Aufwand realisieren. Um deutlich mehr Performance zu gewinnen, habe ich mir den PHP-eAccelerator zugelegt und habe nach einigen Benchmarks auch eine höhere Leistung erzielen können, als ohne. Es ist nicht schwer ihn zu installieren, nur sollte man unbedingt darauf achten, diesen als PHP-Extension und nicht als Zend-Extension zu installieren. Es funktioniert zwar auch, aber als reine PHP-Extension läuft’s nun mal besser. ;-)

Als zweites Gimmick habe ich 2 Werte in der wp-config.php verändert bzw. reingeschrieben:

define(‘SAVEQUERIES’, true);
define(‘WP_CACHE’, true);

Diese beiden Werte helfen dabei, nicht jeden einzelnen Schrott immer wieder zu laden, wenn eine Seite aufgerufen wird. Allerdings solltet ihr dafür noch den Ordner wp-content/cache/ erstellen und diesen mit dem CHMOD 777 ausstatten, sofern das noch nicht getan ist.

Ein weiteres gutes Plugin um die Performance zu checken, ist das Plugin von Bueltge und nennt sich Debug Queries. Es zeigt euch die Queries und deren Ausführungszeit an. Je nach Status der Queries, zeigt es Verbesserungsvorschläge an, wie z.B. einer aus der wp-config.php Datei.

Nicht zu vergessen ist das Apache-Tuning. Ohne das, läuft gar nichts! Ich poste euch mal ein teil meiner Veränderungen in der /etc/httpd/conf/httpd.conf:

Timeout 30
KeepAlive off

<IfModule prefork.c>
StartServers 3
MinSpareServers 3
MaxSpareServers 10
ServerLimit 256
MaxClients 85 #Maxclients = Arbeitsspeicher / 12 MB – Danke Markus!
MaxRequestsPerChild 2000
</IfModule>
<IfModule worker.c>
StartServers 1
MaxClients 85
MinSpareThreads 1
MaxSpareThreads 3
ThreadsPerChild 5
MaxRequestsPerChild 250
</IfModule>

Folgende Zeilen auskommentieren:

#LanguagePriority en ca…
#ForceLanguagePriority Prefer Fallback

Auch einen deutlichen Performance-Schub bringt es, wenn man unbenötigte Module auskommentiert. Bei mir in der Config sind lediglich folgende Module am leben gelieben:

LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_owner_module modules/mod_authz_owner.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule expires_module modules/mod_expires.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule mime_module modules/mod_mime.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule dir_module modules/mod_dir.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so

Probiert euch mal am eAccelerator und Apache aus und schaut mal, ob ihr damit ein paar positive Erfolge erzielen könnt.

Update #1:

Ganz vergessen, natürlich könnt ihr auch noch Einstellungen in der MySQL-Config machen, sofern ihr MySQL nutzt. Dazu habe ich folgende Werte in der /etc/my.cnf

skip-innodb
key_buffer = 2M
myisam_sort_buffer_size = 4M
read_buffer_size = 512K
read_rnd_buffer_size = 4M
max_allowed_packet=4M
thread_stack=128K
thread_cache_size=8
query_cache_limit=512K
query_cache_size=4M
max_connections=85 #Ähnlich wie in der httpd.conf
long_query_time=3
skip-bdb
table_cache=1500
Nicht vergessen, dass ihr nach Änderungen die Services neu starten müsst!