Leistungsvergleich lighttpd und Apache

Dieser Artikel ist gerade in Arbeit.

Aufgabenstellung

Die Leistungsfähigkeit von lighttpd und Apache soll qualitativ untersucht werden. Im Vordergrund steht dabei der Einsatz als Server für drei Webpräsenzen, die bereits seit einiger Zeit online sind. Die Software wurde dazu auf zwei isolierte Testsysteme übertragen. Betrachtet wurde die Performance auf einem Single- und einem Dual-Core-System, ausserdem der Effekt eines PHP-Bytecode-Caches, konkret XCache.
Quantitative Aussagen soll dieser Benchmark nicht liefern, da hierfür vor allem Optimierungen an der verwendeten Software und Hardware notwendig sind, die sehr stark von Einzelfall abhängen.

Testumgebung

Die Leistungsfähigkeit von lighttpd und Apache wurde mit zwei Servern getestet:

  • Intel Pentium 4 1,6 GHz, 2 GB RAM, 2x 40GB ATA - RAID 1
  • AMD Athlon 64 X2 1,8 GHz, 3 GB RAM, 2x 120 GB SATA - RAID 1

Beide System waren über ein Cross-Over-Kabel direkt mit dem Client verbunden, die Übertragungsgeschindigkeit fest auf 100 MBit/s1) eingestellt. Auf dem Client wurden mit mit dem Programm ab (Apache Benchmark), jeweils 10 Minuten (-t 600) lang, Webseiten auf einem der Server abgerufen und die Anzahl der erfolgreichen Antworten pro Sekunde protokoliert (req/s). Nach jedem Testlauf wurden die Logdateien gelöscht und der Server neu gestartet. Jeder Testlauf wurde dreimal durchgeführt und der Durschnittswert gebildet. Die Zahl der gleichzeitigen Abrufe (concurrency) wurde nach jedem Trippel verdoppelt, also nacheinander auf 1 - 2 - 4 - 8 - 16 - 32 - 64 - 128 - 256 - 512 gesetzt. Sofern eine Datenbank zum Einsatz kam, war der tablespace auf einer RAM-Disk abgelegt, auf einen dedizierten MySQL-Server wurde verzichtet2). Unnötige Dienste (cron, mail etc.) waren deaktiviert. Beide Server waren identisch installiert und basierten auf Ubuntu Karmic Koala (32 Bit3)). Die für den Test relevante Software4) war:

  • Apache 2.2.12 (Paketversion 2.2.12-1ubuntu2.1)
  • lighttpd 1.4.22 (Paketversion 1.4.22-1ubuntu4)
  • libapache2-mod-php5 5.1.6 (Paketversion 5.2.10.dfsg.1-2ubuntu6.3) als php5 Interpreter unter Apache
  • php5-cgi 5.2.10 (Paketversion 5.2.10.dfsg.1-2ubuntu6.3) als php5 Interpreter unter lighttpd, eingebunden über die fastcgi Schnittstelle
  • php5-xcache 1.2.2 (Paketversion 1.2.2-5)
  • Mysql 5.1.37 (Paketversion 5.1.37-1ubuntu5)
  • Dokuwiki 2009-02-14b
  • Wordpress 2.8.6
  • serendipity 1.4.1

Statische Seiten

Die Leistungsfähigkeit bei statischen Seiten, wurde bereits in einem früheren Benchmark untersucht. Die qualitative Einschätzung, dass lighttpd vor allem bei vergleichsweise kleinen Dateien performanter ist, gilt nach wie vor. Daher wurde dieser Test vor allem dazu verwendet um die Sättigung der Netzwerkschnittstelle bei beiden Systemen festzustellen, dazu wurde eine 60 kB große Datei verwendet.

statische Seite

c=1 c=2 c=4 c=8 c=16 c=32 c=64 c=128 c=256 c=512
Apache 2.2 (P4) 126,2 151,8 163,2 158,7 163,6 163,7 163,0 162,2 161,1 0
Apache 2.2 (Athlon X2) 131,9 144,5 148,3 154,7 157,1 157,6 159,5 160,1 159,5 159,6
lighttpd 1.4 (P4) 119,6 152,2 155,0 160,2 161,5 163,0 162,9 162,5 160,8 158,3
lighttpd 1.4 (Athlon X2) 134,2 143,8 150,2 154,7 156,2 158,9 159,8 161,0 157,5 155,7

Fazit

In diesem konkreten Test können keine gravierenden Unterschiede festgestellt werden. Lediglich auf dem kleineren Server (Intel Pentium 4) bricht Apache bei 512 gleichzeitigen Zugriffen ab, auf dem Dual-Core-System arbeitet er auch bei diesem Wert klaglos. Zu beobachtet ist, dass beide System während des Tests kaum ausgelastet sind, die Saturierung erfolgt also ohne die CPU zu überlasten. Daraus folgt im Umkehrschluss, dass bereits der Server mit Pentium-4-CPU ausreichend Rechenleistung hat, um die 100 MBit/s des Netzwerks zu sättigen.
Bei genauer Betrachtung der Werte, fällt auf, dass der leistungsfähigere Server geringfügig schlechtere Transferraten liefert. Das liegt im konkreten Fall an der Netzwerkkarte, die auch bei anderen Protokollen langsamer ist. Dies fällt im Test allerdings nicht weiter ins Gewicht, da bei allen weiteren Aufgaben die Rechenleistung der entscheidende Faktor steht.

dokuwiki

Dokuwiki ist eine Software um Wikis zu betreiben. Die Daten werden als Textdateien im Dateisystem abgelegt.

Einfache Seite

Als Beispiel für eine einfache Seite dient die Zeittafel der SmüPedia, die lediglich aus einer Tabelle besteht. Sie enthält nur HTML Code und hat keine externen Referenzen. Es werden ca. 15 KB HTML-Code übertragen.

Intel Pentium 4 1,6 GHz

einfache dokuwiki Seite (P4)

c=1 c=2 c=4 c=8 c=16 c=32 c=64 c=128 c=256 c=512
Apache 2.2 4,0 4,1 4,0 4,0 3,8 3,8 0,4 0 0 0
lighttpd 1.4 4,2 4,1 3,9 3,9 3,8 3,8 3,8 3,8 3,8 3,8
Apache 2.2 mit XCache 16,2 16,9 16,8 16,7 16,5 16,2 15,5 6,5 5,0 0
lighttpd 1.4 mit XCache 16,5 16,8 16,1 15,6 15,6 16,4 16,4 15,0 14,2 13,2

AMD Athlon 64 X2 1,8 GHz

einfache dokuwiki Seite (Athlon X2)

c=1 c=2 c=4 c=8 c=16 c=32 c=64 c=128 c=256 c=512
Apache 2.2 8,4 14,6 15,7 16,5 16,4 16,1 15,8 14,9 14,8 0
lighttpd 1.4 8,0 14,2 16,0 16,1 16,9 16,0 15,8 15,2 15,4 15,3
Apache 2.2 mit XCache 39,5 56,4 60,6 70,6 70,4 69,4 68,7 66,5 67,2 0
lighttpd 1.4 mit XCache 36,0 51,3 62,8 68,1 69,7 67,9 70,3 70,5 68,8 68,3

Komplexe Seite

Als Beispiel für eine komplexe Seite wird die Startseite der SmüPedia verwendet. Im Gegensatz zur o.g. einfachen Seite, wird zu ihrer Erzeugung mehr PHP Code durchlaufen, da Referenzen zu internen Elemente, wie etwa dem Blog und einer Galerie bestehen. Externe Elemente gibt es auch hier nicht, die übertragene Dateigröße beträgt ca. 48 KB.

Intel Pentium 4 1,6 GHz

komplexe dokuwiki Seite (P4)

c=1 c=2 c=4 c=8 c=16 c=32 c=64 c=128 c=256 c=512
Apache 2.2 1,6 1,6 1,6 1,5 1,4 0,5 0,0 0,0 0,0 0,0
lighttpd 1.4 1,6 1,6 1,5 1,5 1,3 1,3 1,3 1,4 1,3 1,3
Apache 2.2 mit XCache 2,8 2,8 2,7 2,7 2,6 2,4 2,2 0,1 0,0 0,0
lighttpd 1.4 mit XCache 2,8 2,7 2,6 2,7 2,6 2,5 2,6 2,6 2,6 2,6

AMD Athlon 64 X2 1,8 GHz

komplexe dokuwiki Seite (Athlon X2)

c=1 c=2 c=4 c=8 c=16 c=32 c=64 c=128 c=256 c=512
Apache 2.2 3,3 5,9 6,4 6,5 6,3 6,2 5,8 5,1 5,4 0,0
lighttpd 1.4 3,3 5,8 6,4 6,3 6,2 6,2 6,0 5,5 5,3 5,3
Apache 2.2 mit XCache 6,0 10,1 11,2 11,4 11,4 11,2 10,9 10,2 10,0 0,0
lighttpd 1.4 mit XCache 5,5 9,6 10,9 11,1 11,0 10,9 10,6 10,3 10,3 10,3

Fazit

Die Zahl der Anfragen, die von den Webservern beantwortet werden können, fällt hier drastisch niedriger aus, als beim reinen Dateitransfer. Hinsichtlich der Entscheidung Apache vs. lighttpd ist die Situation aber ähnlich. Grundsätzlich schenken sich die beiden Kontrahenten nichts. Der wesentlich Unterschied ergibt sich beim Verhalten unter Last. Ohne Unterstützung durch XCache macht Apache früher schlapp als lighttpd, mit dem Intel Pentium 4 Server bricht die Leistung bereits bei 32 bzw. 64 simultanten Zugriffen ein.

Welche Rechnerarchituktur die bessere ist, steht auch zweifelsfrei fest. Der Server mit AMD Athlon 64 X2 hat in beiden Szenarios die Nase vorn. Allerdings fällt die Steigerung nicht proportional aus. Bei einfacher Last, also nur einem simultanten Zugriff, können die Abfragen gerade verdoppelt werden, sobald mehrere Anfragen parallel verabeitet werden müssen, ist eine Steigerung von 250% bis 340% zu beobachten, das gilt sowohl für Apache, als auch für lighttpd. Beim Apache ergibt sich ferner eine höhere Stabilität, so können mit Dual-Core-System dann 256 statt nur 32 bzw. 64 simultane Anfragen verarbeitet werden.

Mit XCache als PHP Bytecode Cache kann die Leistung erhöht werden und im Falle von Apache auch die Stabilität. Allerdings kommt der Apache damit auch nur auf max. 256 gleichzeitige Abfragen, 512 schafft mit Dokuwiki nur lighttpd. Die Steigerung durch XCache beträgt bei der einfachen Seite 250% - 350% und bei der komplexen Seite 70% - 100%.

Wordpress

Startseite

Als erster Testfall dient die Startseite von bloggertreffen.org. Sie enthält die zehn aktuellsten Artikel, es werden ca. 52 kB HTML-Code übertragen

Intel Pentium 4 1,6 GHz

Wordpress Startseite (P4)

c=1 c=2 c=4 c=8 c=16 c=32 c=64 c=128 c=256 c=512
Apache 2.2 0,6 0,6 0,5 0,5 0,1 0,0 0,0 0,0 0,0 0,0
lighttpd 1.4 0,5 0,5 0,5 0,5 0,3 0,2 0,2 0,2 0,1 0,0
Apache 2.2 mit XCache 0,7 0,8 0,7 0,7 0,6 0,5 0,0 0,0 0,0 0,0
lighttpd 1.4 mit XCache 0,7 0,8 0,7 0,7 0,5 0,5 0,5 0,5 0,5 0,5

AMD Athlon 64 X2 1,8 GHz

Wordpress Startseite (Athlon X2)

c=1 c=2 c=4 c=8 c=16 c=32 c=64 c=128 c=256 c=512
Apache 2.2 1,1 2,3 2,3 2,3 2,2 2,0 1,5 0,0 0,0 0,0
lighttpd 1.4 1,1 2,2 2,2 2,2 2,1 1,9 1,1 0,3 0,2 0,0
Apache 2.2 mit XCache 1,5 2,9 3,0 3,0 2,9 2,8 2,4 2,3 2,5 0,0
lighttpd 1.4 mit XCache 1,5 2,9 3,0 2,9 2,8 2,6 2,1 4,8 1,7 2,5

Artikel

Im zweiten Test wird ein Artikel von bloggertreffen.org abgerufen, dabei werden ca. 33 kB HTML-Code übertragen

Intel Pentium 4 1,6 GHz

Wordpress Artikel (P4)

c=1 c=2 c=4 c=8 c=16 c=32 c=64 c=128 c=256 c=512
Apache 2.2 0,6 0,6 0,6 0,5 0,0 0,0 0,0 0,0 0,0 0,0
lighttpd 1.4 0,6 0,6 0,6 0,4 0,0 0,0 0,0 0,0 0,0 0,0
Apache 2.2 mit XCache 0,9 0,9 0,9 0,8 0,8 0,4 0,0 0,0 0,0 0,0
lighttpd 1.4 mit XCache 0,8 0,8 0,8 0,8 0,7 0,7 0,8 0,7 0,7 0,0

AMD Athlon 64 X2 1,8 GHz

Wordpress Artikel (Athlon X2)

c=1 c=2 c=4 c=8 c=16 c=32 c=64 c=128 c=256 c=512
Apache 2.2 1,2 2,4 2,6 2,5 2,4 2,3 2,2 0,0 0,0 0,0
lighttpd 1.4 1,2 2,4 2,5 2,4 2,2 1,6 1,5 0,4 0,2 0,1
Apache 2.2 mit XCache 1,8 3,2 3,5 3,5 3,4 3,2 2,7 2,4 2,3 0,0
lighttpd 1.4 mit XCache 1,7 3,4 3,4 3,4 3,3 3,1 2,7 6,2 2,8 3,6

Fazit

Ähnlich wie beim Dokuwiki-Benchmark geben sich Apache und lighttpd in der Geschwindigkeit wenig. Apache bricht auch hier bei vielen gleichzeitigen Verbindungen früher ein als lighttpd. Mit XCache als PHP Bytecode Cache kann die Stabilität und Leistung erhöht werden. Die Leistungsteigerung beträgt zwischen 30% und 90%.

Auffallend ist der schlechte Performance auf dem Pentium 4 System. Für den produktiven Einsatz ist eine so niedrige Rechenleistung und Speicherausstattung, nur bei Blogs geringer Prominenz sinnvoll einsetzbar. lighttpd spielt aber hier auf niedrigem Niveau seine Stärken aus, im Zusammenspiel mit XCache sind immerhin 256 parallele Zugriffe machbar, Apache schafft gerade 32.

Serendipity

Um die Performance von lighttpd und Apache mit dem Blogsystems Serendipity zu prüfen, dient das Blog Farmblogger.

Startseite

Im ersten Testfall wird die Farmblogger Startseite abgerufen. Sie enthält die zehn aktuellsten Artikel, es werden ca. 97 kB HTML-Code übertragen

Intel Pentium 4 1,6 GHz

S9Y Startseite (P4)

c=1 c=2 c=4 c=8 c=16 c=32 c=64 c=128 c=256 c=512
Apache 2.2 1,2 1,3 1,2 1,2 0,8 0,0 0,0 0,0 0,0 0,0
lighttpd 1.4 1,3 1,3 1,2 1,1 0,9 0,9 0,9 0,9 0,9 0,9
Apache 2.2 mit XCache 3,0 2,7 2,6 2,4 2,4 1,6 1,0 0,0 0,0 0,0
lighttpd 1.4 mit XCache 2,9 2,8 2,4 2,3 2,4 2,1 2,1 2,1 2,0 2,0

AMD Athlon 64 X2 1,8 GHz

S9Y Startseite (Athlon X2)

c=1 c=2 c=4 c=8 c=16 c=32 c=64 c=128 c=256 c=512
Apache 2.2 3,0 5,5 6,0 5,9 5,4 5,4 4,8 3,9 2,8 0,0
lighttpd 1.4 2,3 4,9 5,1 4,9 4,9 4,6 4,5 3,6 3,0 4,6
Apache 2.2 mit XCache 5,8 10,9 12,0 11,8 11,3 10,1 9,6 9,0 8,8 0,0
lighttpd 1.4 mit XCache 5,8 11,2 11,6 11,3 11,0 9,6 8,4 9,6 10,7 6,2

Artikel

Für den zweiten Testfall wird ein einzelner Artikel der Farmblogger abgerufen, dabei werden ca. 43 kB HTML-Code übertragen.

Intel Pentium 4 1,6 GHz

S9Y Artikel (P4)

c=1 c=2 c=4 c=8 c=16 c=32 c=64 c=128 c=256 c=512
Apache 2.2 1,5 1,5 1,4 1,4 1,3 0,0 0,0 0,0 0,0 0,0
lighttpd 1.4 1,4 1,4 1,4 1,4 1,2 1,2 1,2 1,2 1,2 1,2
Apache 2.2 mit XCache 4,6 4,7 3,9 3,8 3,7 3,4 3,0 0,0 0,0 0,0
lighttpd 1.4 mit XCache 4,7 4,5 3,7 3,9 3,7 3,7 3,7 3,7 3,7 2,7

AMD Athlon 64 X2 1,8 GHz

S9Y Artikel (Athlon X2)

c=1 c=2 c=4 c=8 c=16 c=32 c=64 c=128 c=256 c=512
Apache 2.2 2,9 5,7 6,2 6,0 5,8 5,6 5,1 4,8 3,4 0,0
lighttpd 1.4 3,0 5,7 6,2 6,0 5,8 5,7 5,1 5,2 5,4 5,6
Apache 2.2 mit XCache 10,2 18,4 20,8 20,5 18,3 17,4 15,7 14,3 14,7 0,0
lighttpd 1.4 mit XCache 10,2 19,0 20,7 20,3 17,8 16,5 15,3 15,0 23,1 16,0

Fazit

Auch mit Serendipity wiederholt sich der Eindruck der beiden vorangegangen Tests. Im unteren Lastbereich geben sich lighttpd und Apache nicht viel. Bei vielen parallelen Zugriffen bricht der Apache weg, während lighttpd nach wie vor Seiten ausliefert.

Mit XCache als PHP Bytecode Cache kann die Leistung und beim Apache auch die Stabilität erhöht werden. Die Leistungssteigerung fällt deutlicher aus als beim Wordpress Benchmark. Auf dem P4 liegt sie zwischen 100% und 200%, auf dem Athlon X2 sind 90% - 250% möglich.

Im Vergleich mit dem Wordpress Benchmark scheint Serendipity performanter sein. Das deckt sich zwar grundsätzlich mit der praktischen Erfahrung, kann im konkreten Fall aber nicht bestätigt werden, da es sich um Installationen mit unterschiedlichen Inhalten und Funktionalitäten handelt.

Weitere Optimierungsmöglichkeiten

  • 64 Bit Kernel
  • Mehr RAM
  • Tuning Kernelparameter
  • Tuning Apache
  • Tuning lighttpd
  • Tuning Mysql
  • Tuning PHP
  • Tuning XCache
  • Tuning CMS
1) 100 MBit/s ist in den meisten Hosting-Rechenzentren immer noch die Regel.
2) Die Erfahrung hat gezeigt, dass für diese einfache Art von Benchmarks ein lokaler Prozess die performanteste Lösung ist.
3) Eine rein pragmatische Entscheidung, da die Produktivsysteme ebenfalls mit 32 Bit Linux arbeiten.
4) Die Konfiguration blieb, was die leistungsrelevanten Werte anging, bei der jeweiligen Voreinstellung.

Linkbacks

Use the following URL for manually sending trackbacks: http://michaelwenzl.de/dw/lib/plugins/linkback/exe/trackback.php/it:lighttpd_apache
Dokuwiki und die Frage nach dem Webserver, 2009/12/10 09:03 (Trackback)
Als ich kürzlich das Wiki für diese Webseite konfiguriert habe, ist mir aufgefallen, dass ich diverse Dokuwiki-Instanzen mit unterschiedlich konfigurierten Webservern betreibe. Eine Nachlässig, über deren Ursache sich längst der Schleier des Vergessens...
 
 
it/lighttpd_apache.txt · Zuletzt geändert: 2009/12/30 13:28 von Michael Wenzl
 
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht:CC Attribution-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki