WordPress: Performancetuning

Martin hat sich vor ein paar Tagen mal die deutsche Blogosphäre vorgeknöpft und zu nächtlicher Stunde verschiedene Blogs "gebenchmarked", mit erschreckenden Ergebnissen. Darauf hat Tobias Glawe mit einem Artikel reagiert. Dies habe ich zum Anlass genommen, hier auch mal ein bisschen den virtuellen Server dampfen zu lassen und entsprechend zu konfigurieren. Es ist erstaunlich, was man mit richtigem Caching aus so einer virtuellen Maschine herausholen kann.

Viel Technikzeug nach dem Break.

Unter der Motorhaube

Das Blog läuft auf einem 3-Node VPS bei VPS.net, was laut deren Website 1,2 GHz CPU und 768 MB Ram entspricht - also nicht wirklich viel. Alle Tests wurden von einer zweiten VPS mit Apachebench durchgeführt. Die Concurrency war 100 und insgesamt wurden 500 Requests abgeschickt.

Apache2 läuft in der von VPS.net "cloud-optimierten" Konfiguration:

Timeout           15
KeepAlive          On
MaxKeepAliveRequests 100
KeepAliveTimeout   5
StartServers       5
MinSpareServers    5
MaxSpareServers   10
ServerLimit       30
MaxClients        30
MaxRequestsPerChild 100

...und bei PHP sorgt XCache für eine bessere Performance. Auf dem Server befindet sich ausschließlich mein Blog. Der relevante Teil der Apache-Config für nodomain.cc sieht aus wie folgt:

# mod_deflate (gzip) aktivieren
<FilesMatch "\\.(js|css|html|htm|php|xml)$">
SetOutputFilter DEFLATE
</FilesMatch>
# ExpiresHeader: verhindert bedingte GET-Anfragen
<IfModule mod_expires.c>
ExpiresActive on
ExpiresDefault "access plus 35 days"
</IfModule>

Benchmarks

Zuerst mal harte Fakten, der Einfachheit halber poste ich hier nur die Connection Times.

Ohne Caching-Plugin

Serverload ca. 15 (!)

              min  mean[+/-sd] median   max
Connect:        0    2   4.2      0      40
Processing:  1182 12279 2730.9  13068   15873
Waiting:      777 11255 2625.3  12048   14689
Total:       1186 12281 2730.0  13068   15876

Mit W3 Total Cache Plugin

Serverload ca. 1

              min  mean[+/-sd] median   max
Connect:        0    1   2.4      0      22
Processing:   300  751 705.7    412    2811
Waiting:      275  724 704.2    388    2708
Total:        302  753 706.8    414    2815

Varnish ohne Caching-Plugin

Serverload: zu vernachlässigen

              min  mean[+/-sd] median   max
Connect:        0  420 1041.6      0    3001
Processing:   256 23355 29332.0   5102  130635
Waiting:      255 23352 29332.0   5101  130633
Total:        258 23775 29528.3   5476  130636

Varnish mit W3 Total Cache Plugin

Serverload: zu vernachlässigen

              min  mean[+/-sd] median   max
Connect:        1    2   1.2      1       5
Processing:     8   34  35.2     28     234
Waiting:        6   27  18.7     26     231
Total:         11   35  35.3     29     237

Erklärungsversuche

Ohne jegliches Caching-Plugin ist WordPress bei großer Last eine richtige Serversau. Die Kiste hat fast gar nicht mehr reagiert und an den Responsezeiten sieht man, dass es dann auch nicht wirklich Spaß macht, das Blog zu benutzen. Die Verwendung von W3 Total Cache bringt schonmal einiges und ist wohl die zur Zeit beste Wahl auf einem Shared Hosting Server, auf den man keinen Zugriff hat, um Varnish zu installieren.

Varnish kann sein wahres Potenzial allerdings erst dann ausspielen wenn W3 Total Cache aktiviert ist. Ich vermute, das liegt an den modifizierten Cache-Headern, für die dieses Plugin verantwortlich ist.

Für Varnish verwende ich aktuell diese Konfiguration.

Fazit

Performancemäßig ist es gut um mein Blog bestellt - aber ich habe ja auch (noch) nicht soo den Besucheransturm. An den richtigen Stellschrauben gedreht und mit ein paar Helferlein (W3 Total Cache, Apache Config, Varnish) lässt sich auch aus einer LAMP-Umgebung für wenig Geld viel Performance herausholen. Probiert es einfach mal aus!

Ähnliche Artikel:

  1. WordPress: W3 Total Cache gegen Varnish
  2. WordPress: Varnish-Konfiguration
  3. Benchmark: lighttpd, fastcgi, PHP5 mit eAccelerator
  4. Mehr Performance durch eAccelerator
  5. Serendipity 0.82 und Spartacus
Printed from: http://nodomain.cc/2010/01/29/wordpress-performancetuning.html .
© Fabian Fischer 2010.

4 Kommentare   »

  • Statt XCode kannst Du auch APC verwenden, ich mag den persönlich lieber.
    Und vor allem statt mod_php fastcgid verwenden oder gleich den Indiander durch lighttpd oder ngix ersetzen, falls nicht schon geschehen.
    Auf jeden Fall aber ein bookmarkenswerter Artikel ;-)

    • ff says:

      Danke für den Hinweis, das werde ich bei Gelegenheit testen.

    • Jesco says:

      FastCGI ist nicht schneller als mod_php, und wenn das Blog die einzige gehostete Seite ist, ist mod_php schon OK. Auf einem VPS würde ich allerdings auch eher Lighty einsetzen - mit mod_magnet kann man Caching sehr schön und v. a. flexibel steuern. Nginx hingegen würde ich erst in Erwägung ziehen, wenn Lighty mit seinem 1-Prozess-Design nicht mehr ausreichend skaliert - das dürfte aber auch weit jenseits der Leistungsgrenze eines VPS liegen :-)

      • ff says:

        Danke für die Info. Hast du Beispiele für eine mod_magnet-Config? Dann probier ich das gerne mal aus.
        Wobei ich bezweifle, dass viel mehr als ca. 25 Requests/s drin sein werden - dank Varnish kommen diese mittlerweile ja gar nicht mehr beim Apachen an:

        Server Software: Apache/2.2.9
        Server Hostname: nodomain.cc
        Server Port: 80

        Document Path: /
        Document Length: 23164 bytes

        Concurrency Level: 100
        Time taken for tests: 17.439 seconds
        Complete requests: 500
        Failed requests: 0
        Write errors: 0
        Total transferred: 11820990 bytes
        HTML transferred: 11582000 bytes
        Requests per second: 28.67 [#/sec] (mean)
        Time per request: 3487.800 [ms] (mean)
        Time per request: 34.878 [ms] (mean, across all concurrent requests)
        Transfer rate: 661.96 [Kbytes/sec] received

        Connection Times (ms)
        min mean[+/-sd] median max
        Connect: 29 34 2.2 34 59
        Processing: 152 3089 809.6 3414 3497
        Waiting: 37 1652 982.4 1658 3353
        Total: 183 3123 809.4 3448 3530

Tweetbacks

RSS-Feed mit Kommentaren zu diesem Posting , TrackBack URI

Kommentar posten


  • Kategorien

  • Archive