WordPress

PHP-Serverkonfigurationen im Performancetest

caticonslite_bm_alt

Ziel dieses Vergleichs war es, die performantesten PHP-Konfigurationen für Drupal, TYPO3 und WordPress festzustellen und daraus auf die im Allgemeineinsatz performanteste Konfiguration zu schließen. Getestet wurden die Standardinstallationspakete Drupal 7.16TYPO3 4.7 Government Package und WordPress 3.4.2 mit Apache Bench für einen Zeitraum von je 30 Sekunden (z.B. „ab -kc 250 -t 30 http://127.0.0.1/drupal/“). Um möglichst faire Bedingungen zu schaffen wurden die involvierten Software-Komponenten vor jedem Test neu gestartet (z.B. „/etc/init.d/nginx restart && /etc/init.d/php5-fpm restart“). Der Testinstanz waren vier Kerne eines E5649-Xeon-Prozessors, 16 GB RAM und zwei SATA-Festplatten im Hardware-RAID 1-Verbund exklusiv zugewiesen. Als Software wurden die Komponenten in ihrer Standardkonfiguration aus dem Debian Wheezy-Repository eingesetzt.

Folgende Konfigurationen wurden getestet:

  • apache2-mpm-prefork + libapache2-mod-fcgid
  • apache2-mpm-prefork + libapache2-mod-fcgid + php-apc
  • apache2-mpm-prefork + libapache2-mod-php5
  • apache2-mpm-prefork + libapache2-mod-php5 + php-apc
  • apache2-mpm-prefork + libapache2-mod-suphp
  • apache2-mpm-prefork + libapache2-mod-suphp + php-apc
  • apache2-mpm-worker + libapache2-mod-fcgid
  • apache2-mpm-worker + libapache2-mod-fcgid + php-apc
  • apache2-mpm-worker + libapache2-mod-suphp
  • apache2-mpm-worker + libapache2-mod-suphp + php-apc
  • nginx + php5-fpm
  • nginx + php5-fpm + php-apc

Die performantesten Konfigurationen für Drupal:

  1. 152,94 Requests/s, 250 Concurrency: apache2-mpm-prefork + libapache2-mod-fcgid + php-apc
  2. 147,12 Requests/s, 250 Concurrency: apache2-mpm-worker + libapache2-mod-fcgid + php-apc
  3. 146,68 Requests/s, 100 Concurrency: nginx + php5-fpm + php-apc
  4. 145,83 Requests/s, 50 Concurrency: apache2-mpm-prefork + libapache2-mod-php5 + php-apc
  5. 132,43 Requests/s, 50 Concurrency: apache2-mpm-worker + libapache2-mod-fcgid + php-apc
  6. 130,92 Requests/s, 250 Concurrency: apache2-mpm-prefork + libapache2-mod-php5 + php-apc
  7. 128,88 Requests/s, 50 Concurrency: apache2-mpm-prefork + libapache2-mod-fcgid + php-apc

Die performantesten Konfigurationen für TYPO3:

  1. 180,32 Requests/s, 50 Concurrency: apache2-mpm-prefork + libapache2-mod-php5 + php-apc
  2. 179,99 Requests/s, 250 Concurrency: apache2-mpm-worker + libapache2-mod-fcgid + php-apc
  3. 173,87 Requests/s, 250 Concurrency: apache2-mpm-prefork + libapache2-mod-php5 + php-apc
  4. 166,69 Requests/s, 50 Concurrency: apache2-mpm-worker + libapache2-mod-fcgid + php-apc
  5. 166,03 Requests/s, 250 Concurrency: apache2-mpm-prefork + libapache2-mod-fcgid + php-apc
  6. 163,55 Requests/s, 50 Concurrency: apache2-mpm-prefork + libapache2-mod-fcgid + php-apc
  7. 111,03 Requests/s, 100 Concurrency: nginx + php5-fpm + php-apc

Die performantesten Konfigurationen für WordPress:

  1. 57,75 Requests/s, 100 Concurrency: nginx + php5-fpm + php-apc
  2. 55,97 Requests/s, 250 Concurrency:  apache2-mpm-prefork + libapache2-mod-fcgid + php-apc
  3. 52,21 Requests/s, 50 Concurrency: apache2-mpm-worker + libapache2-mod-fcgid + php-apc
  4. 49,93 Requests/s, 50 Concurrency: apache2-mpm-prefork + libapache2-mod-fcgid + php-apc
  5. 48,99 Requests/s, 250 Concurrency: apache2-mpm-worker + libapache2-mod-fcgid + php-apc
  6. 48,09 Requests/s, 50 Concurrency: apache2-mpm-prefork + libapache2-mod-php5 + php-apc
  7. 46,7 Requests/s, 250 Concurrency: apache2-mpm-prefork + libapache2-mod-php5 + php-apc

Download aller Apache Bench-Ergebnisse und der Excel-Auswertung

Fazit:

Dass libapache2-mod-suphp im Vergleich zu den anderen Testkandidaten nicht gut abschneiden und APC die Performance enorm steigern wird, war bereits vor dem Test klar. Enttäuschend war in jedem Fall die Leistung von WordPress, welche auf fehlende Cachingmechanismen im Core zurückzuführen ist. Im allgemeinen Vergleich zeigte besonders libapache2-mod-fcgid bei hohen (250 Concurrency) und moderaten (50 Concurrency) Zugriffszahlen eine gute Performance. Als reiner Webserver mag nginx zwar schneller als Apache sein, im Zusammenspiel mit PHP konnte sich nginx gegen Apache aber nicht durchsetzen.

Mein (klarer) Favorit ist apache2-mpm-worker + libapache2-mod-fcgid + php-apc, wer einfachere Konfigurationen bevorzugt und bei dem Benutzerrechte keine Rolle spielen ist auch mit apache2-mpm-prefork + libapache2-mod-php5 + php-apc gut bedient.

Domain eines WordPress-Blogs ändern

caticonslite_bm_alt

Möchte man die Domain eines WordPress-Blogs ändern, so sind hierfür Änderungen in der Datenbank erforderlich. Zum einen müssen in der Tabelle „wp_options“ die Einträge „home“ und „siteurl“ angepasst werden, zum anderen in „wp_posts“ alle „guid“-Einträge. Andernfalls ist ein „wp-admin“-Login nicht möglich bzw. wird WordPress z.B. Bilder aus der Mediathek weiterhin von der alten URL/Domain ausliefern. Die hierfür erforderlichen SQL-Anweisungen kann man z.B. mit phpMyAdmin oder ähnlichen Tools ausführen:

UPDATE `wp_options` SET `option_value` = REPLACE(`option_value`, 'dev.webentwickler.at', 'webentwickler.at');
UPDATE `wp_posts` SET `guid` = REPLACE(`guid`, 'dev.webentwickler.at', 'webentwickler.at');

„dev.webentwickler.at“ stelle in diesem Fall die alte Domain dar, während es sich bei „webentwickler.at“ um die neue Domain handelt. War der WordPress-Blog früher in einem Unterverzeichnis installiert, so ist die zu ersetzenden Zeichenkette um dieses zu erweitern – z.B. „dev.webentwickler.at/pfad/zum/unterverzeichnis“.

 nach oben