Was ist der ideale Weg, um die Speichernutzung von WordPress zu profilieren?


8

Wir führen eine WordPress-Instanz mit mehreren Standorten auf zwei Rackspace Cloud-Servern, einem Web und einer Datenbank, mit derzeit etwa 30 Websites aus. Ich habe Nginx für statische Assets in den Vordergrund gestellt und Apache verarbeitet alle dynamischen Anforderungen. Ich habe auch Memcached für das Datenbank- und APC-Op-Code-Caching für PHP konfiguriert. Der W3-Gesamtcache ist standardmäßig auf allen Websites aktiviert.

Es ist schnell böse mit einem Problem: Apache-Prozesse wiegen regelmäßig zwischen 80 und 120 MB. Der Webserver hat 2 GB Speicher, was bedeutet, dass ich ungefähr 15 Prozesse bekomme, bis die Dinge auf Hochtouren laufen. Die Prozesse sollten natürlich nicht so groß sein, aber ich bin ratlos, warum sie sind.

Was ist eine gute Strategie, um festzustellen, was los ist?

Danke im Voraus!

Update 02.10.10: Für diejenigen, die sich fragen, war die Lösung des Speicherproblems die Deaktivierung von PHP xdebug (wurde bei der Konfiguration versehentlich aktiviert und verursachte zufällige Speicherauslastungsspitzen).

Antworten:


4

Die Apache-Prozessspeichermenge, über die Sie sprechen (80 bis 120 MB pro Prozess), kann in zwei Gründe aufgeteilt werden.

  1. Apache
  2. Wordpress

Apache

Sie können Apache optimieren, indem Sie nur die Anzahl der benötigten Module und andere Optimierungsoptimierungen laden, die den Speicher reduzieren. Wenn Sie das noch nicht optimiert haben, nehmen Sie einige Optimierungen vor.

Wordpress

Wordpress verbraucht nur viel Speicher und ist überhaupt nicht sehr optimiert. Ich würde damit beginnen, die Datenbankklasse durch etwas zu ersetzen, das besser implementiert ist. Das sollte schneller werden und die Speichernutzung erheblich reduzieren. Daneben habe ich nicht so viel vorzuschlagen. Die Verwendung von Worpdress wird meiner Meinung nach nicht als hilfreich angesehen.

Strategien

Um herauszufinden, was los ist, müssen Sie nachverfolgen, wie viel Speicher eine WordPress-Anfrage belegt. Es gibt eine Funktion memory_get_peak_usage()zum Abrufen der Spitzenauslastung ( ), mit der Sie die Speichernutzung von Worpdress überwachen können. Wenn es nahe an die 80 - 120 MB kommt, über die Sie geschrieben haben, wissen Sie, dass WordPress Ihre Kopfschmerzen verursacht. Möglicherweise möchten Sie den Zeitstempel, den Spitzenspeicher, die Ausführungszeit und den angeforderten URI protokollieren.

Die Verwendung von Nginx zum Bereitstellen von zwischengespeicherten WordPress-Seiten hilft Ihnen mit Sicherheit, da dadurch verhindert wird, dass WordPress geladen wird - selbst bei "eingehenden" Caches wie dem von Ihnen verwendeten. Sie sind konzeptionell fehlerhaft, da sie ein WordPress-Plugin sind. Daher muss zumindest ein Teil von WordPress geladen werden, auch für zwischengespeicherte Ergebnisse.


1

Daniel,

Ich bin mit Kenkeiter respektvoll nicht einverstanden. Ich verstehe, dass ich Nginx als Reverse-Proxy vor Apache verwende. Harvard Law hat mit dieser Methode großen Erfolg gehabt und sie haben einen großartigen Artikel darüber, wie sie dies tun, mit einem Link zu ihrem WordPress-Plugin, das die Schnittstelle zu Nginx erleichtert:

http://blogs.law.harvard.edu/djcp/2010/01/nginx-as-a-front-end-proxy-cache-for-wordpress/

Bei Harvard Law stellten sie fest, dass Nginx im Grunde genommen alle Anforderungen im Front-End zwischenspeichert, die Leistung bei der Verwendung anderer Plugins vom Typ Caching im Backend jedoch nicht verbessert und die zusätzliche Komplexität nicht wert ist. Wenn Sie es ernst meinen, Nginx auf diese Weise zu verwenden, empfehlen wir Ihnen, sich diesen Artikel über ihre Erfahrungen anzusehen und zu versuchen, die dynamischen Prozesse, einschließlich des WP-seitigen Caching, zu reduzieren.

Einige grundlegende Probleme wie das sorgfältige Durchsuchen Ihrer Apache-Zugriffs- und Fehlerprotokolle, um festzustellen, welche Arten von Abfragen tatsächlich dynamisch ausgeführt werden müssen, und der Versuch, solche Fälle zu reduzieren, können ebenfalls ein guter Anfang sein.


0

Zunächst einmal verwenden Sie Apache und Nginx - irgendwie redundant. Sie sollten Nginx / FastCGI mit PHP verwenden. Das Tutorial auf dieser Seite sollte helfen. Ansonsten gehe ich davon aus, dass eine kürzlich vorgenommene Änderung Ihres Codes dazu führt, dass ein Fehler in PHP den Speicher nicht ordnungsgemäß freigibt. Es gibt keinen Grund, warum ein Apache-Prozess so viel Speicher verbrauchen sollte.

http://interfacelab.com/nginx-php-fpm-apc-awesome/

Viel Glück!

@kenkeiter


Nginx / FastCGI wäre fantastisch, aber es liegt außerhalb des Rahmens der Lösung dieses Problems
Daniel Bachhuber
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.