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:

…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:

Benchmarks

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

Ohne Caching-Plugin

Serverload ca. 15 (!)

Mit W3 Total Cache Plugin

Serverload ca. 1

Varnish ohne Caching-Plugin

Serverload: zu vernachlässigen

Varnish mit W3 Total Cache Plugin

Serverload: zu vernachlässigen

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!

5 Replies to “WordPress: Performancetuning”

  1. 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 😉

    1. 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 🙂

      1. 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

Leave a Reply

Your email address will not be published. Required fields are marked *