TYPO3 Performanceoptimierung

veröffentlicht in Consulting am 14. Mrz. 2012 Tags: , , , ,

Ein neuer Kunde nutzt TYPO3 als CMS, hat aber einige Probleme mit der Geschwindigkeit. Er fragte uns, ob wir einen Blick auf das System werfen können. Die Maschine entpuppte sich als VMware Instanz mit zwei CPUs, 2 GB Speicher und einem Ubuntu 10.04 LTS. Einige Optimierungen waren bereits umgesetzt, wie beispielsweise die Nutzung von  mod_deflate in Apache.

Die initiale Optimierung bestand im Installieren eines PHP-Bytecode-Caches. Da die Ubuntu-LTS-Version kein aktuelles APC mitbringt, installierten wir über „pecl install apc“ die neuste Version und aktivierten sie für die Apache Instanz. Die Größe des Caches erhöhten wir durch eintragen der Zeile „apc.shm_size=128M“ in der Datei „/etc/php5/conf.d/apc.ini“ auf 128MB und im selben Moment erhöhten wir auch die Anzahl des allokierbaren Shared Memories auf 256MB. Dies geschieht für das laufende System durch ausführen von „echo 268435456 > /proc/sys/kernel/shmmax“. Die Änderung wird durch einen Eintrag in die Datei /etc/sysctl.conf über einem Systemneustart persistent gemacht: „kernel.shmmax=268435456“.

Im nächsten Schritt behoben wir die  wichtigsten Google PageSpeed Meldungen.  Das größte gemeldete Problem waren die fehlenden Cacheheader für Bilder. Durch das Kommando „a2enmod expires“ wird das Modul zum Setzen von Cacheheadern aktiviert und ein Eintrag von:

ExpiresActive On
ExpiresDefault "access plus 1 month"

in der Datei „/etc/apache2/mods-enabled/expires.conf“ sorgt dafür, dass alle statischen Inhalte für mindestens einen Monat ab dem Zugriff gecached werden. YSlow empfahl noch das deaktivieren des FileETag-Headers, was wir durch Eintrag „FileETag none“ in der Datei „/etc/apache2/httpd.conf“ auch taten.

Unser letzter Schritt bestand im Aktivieren des  installierten Memcached-Servers als Backendcache. Dies wird in der Datei „typo3conf/localconf.php“ der TYPO3 Installation durchgeführt, durch Eintragen der Zeilen:

//use memcached backend as cache
$TYPO3_CONF_VARS['SYS']['useCachingFramework'] = '1';
 
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['cache_pages']['backend'] = 't3lib_cache_backend_MemcachedBackend';
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['cache_pages']['options'] = array(
 'servers' => array('localhost:11211'),
 );
 
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['cache_pagesection']['backend'] = 't3lib_cache_backend_MemcachedBackend';
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['cache_pagesection']['options'] = array(
 'servers' => array('localhost:11211'),
 );
 
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['cache_hash']['backend'] = 't3lib_cache_backend_MemcachedBackend';
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['cache_hash']['options'] = array(
 'servers' => array('localhost:11211'),
 );
 
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['dbal'] = array(
    'backend' => 't3lib_cache_backend_MemcachedBackend',
    'options' => array(
        'servers' => array('localhost:11211'),
    )
);

Der Kunde war mit der erreichten Performance zufrieden und wir boten ihm noch weitere Optimierungen an:

  • Optimierung des MySQL-Servers
  • Aufteilen der Bilder- und JS-Dateien auf unterschiedlicher Domains
  • Nutzung eines schnelleren Webservers wie nginx für statische Inhalte
  • Nutzung von Varnish als Reverse Proxy

Diese Vorschläge will er eventuell in der Zukunft adaptieren.

 

Über Tobias Kalbitz

Tobias Kalbitz ist Experte für Software Architektur, skalierbare Systeme und Hochverfügbarkeit. Seine Erfahrungen in der Optimierung von Software helfen Kunden regelmäßig ihren Softwarestack und Hardwareressourcen zu konsolidieren.

Kommentare deaktiviert für TYPO3 Performanceoptimierung

Magento meets Actindo ERP — Konnektorprobleme

veröffentlicht in Consulting am 9. Feb. 2012 Tags: , ,

Einer unser Kunden nutzt den kostenlosen Actindo ERP Konnektor und hatte in den letzten Tagen Probleme seine Produkte mit dem Magentoshop abzugleichen. Es klappte bis zu diesem Zeitpunkt problemlos. Nachdem die Artikelanzahl in den letzten paar Monaten auf mehrere Tausend gestiegen war, funktionierte der Abgleich plötzlich nicht mehr.

Es stellte sich nach Auswertung eines Netzwerkdumps heraus, dass die Shopseite eine Anfrage über den XMLRPC-Server erhält, aber nie auf den Request antwortet. Als das Zeit- und Speicherlimit für PHP, die üblichen Verdächtigen in solchen Fällen, ausgeschlossen waren, sahen wir, dass der Konnektor suboptimale Anfragen an die Datenbank stellt und diese somit schwer arbeiten musste. Die angefragten 500 Artikel können so nicht rechtzeitig geliefert werden und die Gegenseite bricht den Versuch ab.

Da der Kunde eine schnelle Lösung benötigt, um die neusten Produkte zu synchronisieren, beschränkten wir den Abgleich auf 350 Artikel. Weiterhin unterbreiteten wir ihm den Vorschlag das Problem durch geschicktere Datenbankanfragen und Caching der Ergebnisse  komplett aus der Welt zu schaffen um die volle Funktionalität wiederherzustellen.

Falls Sie auch Unterstützung bei der Anbindung eines ERP-Systems an Magento  oder der Anpassung am Shop benötigen, nehmen Sie Kontakt mit uns auf und wir helfen Ihnen gerne weiter.

Über Tobias Kalbitz

Tobias Kalbitz ist Experte für Software Architektur, skalierbare Systeme und Hochverfügbarkeit. Seine Erfahrungen in der Optimierung von Software helfen Kunden regelmäßig ihren Softwarestack und Hardwareressourcen zu konsolidieren.

Kommentare deaktiviert für Magento meets Actindo ERP — Konnektorprobleme

Magento Performanceoptimierung

veröffentlicht in Consulting am 7. Feb. 2012 Tags: , , ,

tl;dr: Seite laden: 16s -> 4.5s , TTFB: 4.5s -> 2.5s, Datenmenge: 1.1MB -> 0.59MB, PageSpeed: 75% -> 93%

Einer unserer Kunden kam mit dem Wunsch auf uns zu, seinen Magentoshop zu beschleunigen. Es ist ein relativ neuer Shop, der noch am Anfang seiner Entwicklung steht. Das Hosting übernimmt ein vServer, für den der Kunde auch root-Zugang hat. Unsere ersten Schritte bestanden in einer Ist-Analyse gefolgt von einer Soll-Definition. Der Kunde wählte dafür eine für Ihn repräsentative Seite aus.

Für die Untersuchung der Seite boten sich die Webseiten GTmetrix und WebPagetest an. GTmetrix fasst die Ergebnisse von YSlow und Google PageSpeed zusammen und als Bonus speichert es alte Messungen zum Vergleich der verschiedenen Optimierungen. Die Seite WebPagetest überzeugt mit aussagekräftigen Wasserfall und Verbindungsdiagrammen.

Bei der Analyse zeigte sich, dass das Rendern der Seite mehr als 15 Sekunden benötigt und diese Seite mehr als 1.1 MB an initialen Daten benötigt. Als Ziel setzte der Kunde 6 Sekunden zum Rendern der Seite. Das sahen wir auch als realistisch an.

Beispiel eines Verbindungsdiagramms

Im Wasserfalldiagramm stellt sich die TTFB (Time To First Byte) als größter Posten dar und dort begannen wir auch mit unserer Arbeit. Nach eingehender Analyse der momentanen Systems zeigte sich auf PHP-Seite, dass der APC Bytecode Cache mit 12MB zu klein dimensioniert war und PHP per FCGI eingebunden ist.

Der kleine Cache sorgte für eine schnelle Verdrängung von Cacheeinträgen. Dies führt zu einer Hit / Miss Rate von 20 / 80. Da jeder FCGI Prozess seinen eigenen Bytecode Cache benötigt, wird bei der Nutzung von APC für den Magento Cache zusätzlicher Platz benötigt. Wir splitteten den Mangento Cache und Bytecode Cache in zwei verschiedene Systeme. Der APC-Cache ist mit 128MB bemessen und sorgt für das Cachen des Bytecodes. Der Magento Cache wird jetzt durch einen Memcached-Server mit 256MB übernommen. Durch diese Maßnahme kann der Kunde später durch neue Server horizontal skalieren und hat einen gemeinsamen Cache für alle Instanzen. Die TTFB war damit bei einem Drittel der ursprünglichen Zeit und die Hit- / Missrate für den APC- und Bytecode-Cache bei 99/1.

Die Begutachtung des Seiten-HTML-Codes förderte zu Tage, das Boxen mit aktuellen Angebote per iframe eingebunden wurden. Dies sorgte beim Laden der Seite für ein ständiges Neurendern und verzögerte den subjektiven Seitenaufbau. Die diversen iframes konsolidierten wir zu einem einzigen, der bereits von Magento an der richten Stelle im Template eingebunden wird.

Die Verbindungsanalyse von GTmetrix zeigte, das viele Bilder/CSS/JS Dateien sequenziell geladen werden müssen und nur eine begrenzte Anzahl von Verbindungen zum Server aufgebaut werden. Dies lösten wir durch Aktivieren von HTTP-Pipelining im Apacheserver und Aufteilung der js, media und skin Verzeichnisse auf verschiedene vHosts. Beispielhaft nachzulesen ist das in einem Blogeintrag zum Thema Hostplitting.

Beispiel eines Wasserfalldiagramms

Als letztes widmeten wir uns dem Thema Trafficreduzierung. Dazu ließen wir Magento alle CSS- und JS-Dateien jeweils in eine Datei zusammenfassen und diese mit einem CSS- und JS-Minifier weiter komprimieren, die Produktbilder von Magento auf die korrekte Größe skalieren.

Weiterhin verkleinerten wir die Bilder ohne Qualitätseinbußen durch das Tool in Googles Pagespeed.  Die GZip-Kompression aller textuellen Ressourcen und das Setzen eines Expires-Headers durch den Apache Server brachte noch einmal einen deutliche Geschwindigkeitssteigerung und Trafficreduzierung bei weiteren Zugriffen auf die Seite.

Desweiteren setzten wir alle einfach zu erreichenden Vorschläge von YSlow und Googles Pagerank um.

Das Ergebnis der Mühe ist ein Shop, der in 4.5 Sekunden lädt.  Der benötigte Traffic für die Seite sank dabei von 1.1MB auf 590KB. Das YSlow-Ranking wuchs von  67% auf 80% und das PageSpeed-Ranking von 75% auf 93%.

Wir legten dem Kunden dar, dass er die Ladezeit von 4.5s weiter reduzieren könnte, da dort 2.5s als TTFB enthalten sind. Dies könnte er durch geschicktes Caching mittels eines Reverse Proxy wie beispielsweise Varnish erreichen. Das Laden des statischen Contents könnte weiterhin auch durch einen leichtgewichtigeren Webserver wie lighttpd oder nginx noch beschleunigt werden. Der Kunde ist mit dem erreichten Zustand sehr zufrieden und priorisiert momentanen andere Projekte höher.

Falls auch Sie Hilfe bei der Beschleunigung ihres eCommerce Portals benötigen, stehen wir Ihnen gerne mit Rat und Tat  zur Seite. Fordern Sie uns ! Wir lieben Herausforderungen. Nehmen Sie einfach über das Kontaktformular mit uns Kontakt auf und wir melden uns bei Ihnen.

Über Tobias Kalbitz

Tobias Kalbitz ist Experte für Software Architektur, skalierbare Systeme und Hochverfügbarkeit. Seine Erfahrungen in der Optimierung von Software helfen Kunden regelmäßig ihren Softwarestack und Hardwareressourcen zu konsolidieren.

Kommentare deaktiviert für Magento Performanceoptimierung
Nächste Seite »