Magento Benchmarking und Tuning Teil 1

Das Magento nicht das performanteste Shopsystem ist wurde schon häufiger festgestellt und bemängelt. Nachdem ich nun meinen ersten Magento Shop unter www.vitalityshop.de auf einem Produktionssystem installiert habe, wollte ich es natürlich genau wissen.

Vom ersten Gefühl her musste ich leider auch feststellen, das sich der Shop etwas zäh anfühlte. Zwischen einem Klick auf eine beliebige Kategorie und der Seitenansicht verging spürbar eine Zeitspanne von etwa einer Sekunde. Zahlen sagen mehr als Gefühle, also schnell lokal mal eine Messung gestartet.

$ ab2 -c 5 -n100 http://www.vitalityshop.de/blue-lagoon-mineral-foaming-cleanser.html

Bei einer Simulation von 5 gleichzeitigen und insgesamt 100 Requests kam dann die Bestätigung.

Server Software: Apache/2.2.3
Server Hostname: http://www.vitalityshop.de
Server Port: 80

Document Path: /blue-lagoon-mineral-foaming-cleanser.html
Document Length: 23263 bytes
Concurrency Level: 5
Time taken for tests: 52.164003 seconds

Complete requests: 100
Failed requests: 0
Write errors: 0
Total transferred: 2371500 bytes
HTML transferred: 2326300 bytes
Requests per second: 1.92 [#/sec] (mean)
Time per request: 2608.200 [ms] (mean)
Time per request: 521.640 [ms] (mean, across all concurrent requests)
Transfer rate: 44.38 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 3.5 0 20
Processing: 1794 2576 250.0 2575 3212
Waiting: 1776 2530 245.7 2534 3123
Total: 1794 2576 251.2 2575 3212

Knapp 2 Requests pro Sekunde sind also sicher nicht gut. Die Performance spürt man bei jedem Klick.

Hier noch ein paar Angaben zum Rootserver.

AMD Athlon(tm) 64 X2 Dual Core Processor 4400+, 2 GB RAM
OpenSuSE 10.2
PHP 5.2.6
Apache 2.2.3
MySql 5-0-26 

Nachdem also eine erste Übersicht über den IST-Zustand erfolgte geht es nun an die Optimierung des Servers. Hier sollte man sich zunächst überlegen, wohin die Reise gehen soll.

In meinem Fall habe ich vor, den Server auf einen Wert von ca. 5 Requests pro Sekunde zu bringen. Bei einer aktuelleren Hardware kann man sich bestimmt optimitischere Werte wie 10-15 Requests pro Sekunde vornehmen.

APC

Der erste Tipp bei Anleitungen zur Performancesteigerung ist die Installation von Alternative PHP Cache (APC), dem Opcode Cache für PHP. Dummerweise ist dieser auf meinem Server schon installiert und trotzdem habe ich diese gruselige Performance von knapp 2 Seiten pro Sekunde.

Ich habe testweise mal APC deaktiviert und es kam zwar auch ein noch schlechterer Wert (1,78) heraus, aber der Unterschied von 7,8% zu dem oben gemessenem Wert fällt dann auch nicht mehr so ins Gewicht. Auf dem gleichen Webserver läuft auch eine Typo3-Installation. Hier ergab sich ein Wert von 2,83 RPS ohne APC und 4,47 RSP mit APC. Also eine Steigerung von 58% durch den Opcode Cache.

Ich habe zunächst versucht mit den Einstellungen von APC zu spielen. Hier liefert apc.php gute Hilfe. Hat aber auch nicht viel geändert.

Neben dem normalen File Caching gibt es bei APC aber auch das sogenannte Daten Caching. Hier kann man zum Beispiel oft benötigte Arrays reinlegen und muss diese dann nicht immer auf jeder Seite neu aus der Datenbank oder anderen Quellen zusammenstellen. Unter Magento aktiviert man das Daten Caching mit einem Eintrag in /app/etc/local.xml innerhalb des Block global:
<cache>
    <backend>apc</backend>
    <prefix>alphanumeric</prefix>
</cache>

Das brachte eine Steigerung um 9,3% auf 2,1 Requests pro Sekunde. Also wenigstens schon mal eine 2 vor dem Komma. Ich bin mir hier aber sehr unsicher, da ich nicht genau weiß ob das aktivieren der Funktion innerhalb von Magento schon als stabil angesehen werden.

MySQL

Zunächst habe ich den Server mit dem sehr guten tuning-primer.sh Script prüfen lassen. Nach jeder Änderung sollte man den Server ein paar Tage arbeiten lassen und dann das Script erneut aufrufen.

Bei meinem Server ging es hauptsächlich darum den von MySQL in Beschlag genommenem Hauptspeicheranteil zu reduzieren, da ich bei vielen Einstellungen zu hohe Werte hatte. Das ist aber natürlich immer auch von den Anwendungen abhängig die alle auf dem Server laufen.

Außerdem war der Query Caching nicht aktiviert, bzw. Stand die Größe auf 0. Weitere Tipps zur Einstellung des Query Caches kann man auch bei magento-news nachlesen.

Letztlich hat aber alles Schrauben an den MySQL-Einstellungen bei mir nichts gebracht. Der Server hat jetzt nur etwas mehr Hauptspeicher zur Verfügung die vorher unnötig von MySQL belegt waren. Schneller wurde Magento dadurch aber nicht.

Fazit

Die erhofften 5 Requests pro Sekunde wurden nicht einmal annähernd erreicht. Bei einer unzureichenden Hardware scheinen alle Performance-Tipps nicht viel einzubringen. Wie wird es da wohl erst bei Shared-Systemen aussehen?

Ich werde die Tests demnächst auf einen frischen Rootserver mit aktueller Hardware ausprobieren.

One Response to Magento Benchmarking und Tuning Teil 1

  1. […] Benchmarking und Tuning Teil 3 Nachdem es in Teil 1 und Teil 2 mehr um Fragen der Hardware und der richtigen Konfiguration des LAMP-Gespannes ging, […]

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: