it-swarm.com.de

Was ist der ideale Weg, um die Speicherauslastung von WordPress zu messen?

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

Mit einem Problem ist es schnell verrückt: 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 fritz laufen. Die Prozesse sollten natürlich nicht so groß sein, aber ich bin ratlos, warum sie sind.

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

Danke im Voraus!

Update 10/2/10: Für diejenigen, die sich fragen, war die Lösung des Speicherproblems das Deaktivieren von PHP xdebug (wurde bei der Konfiguration versehentlich aktiviert und verursachte Spitzen bei der zufälligen Speichernutzung).

8

Der Apache-Prozessspeicher, von dem Sie sprechen (80 bis 120 MB pro Prozess), kann in zwei Gründe unterteilt 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 Arbeitsspeicher 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 besseres zu ersetzen. Das sollte schneller werden und den Speicherverbrauch stark reduzieren. Darüber hinaus habe ich nicht viel zu sagen. Die Nichtverwendung von Worpdress wird meiner Meinung nach nicht als hilfreich erachtet.

Strategien

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

Die Verwendung von Nginx zum Bereitstellen von zwischengespeicherten WordPress-Seiten wird Ihnen mit Sicherheit helfen, da es verhindert, dass WordPress geladen wird - auch für solche "eingehenden" Caches wie den von Ihnen verwendeten. Sie sind konzeptionell fehlerhaft, da sie ein WordPress-Plugin sind, sodass zumindest ein Teil von WordPress geladen werden muss, auch wenn die Ergebnisse zwischengespeichert sind.

4
hakre

Daniel,

Ich bin mit Kenkeiter nicht einverstanden. Ich verstehe, dass ich Nginx als Reverse Proxy vor Apache benutze. Harvard Law hatte großen Erfolg mit dieser Methode und sie haben einen großartigen Artikel darüber, mit einem Link zu ihrem WordPress-Plugin, das die Schnittstelle zu Nginx unterstützt:

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

Was sie bei Harvard Law entdeckten, war, dass Nginx im Grunde genommen alle Anforderungen im Front-End zwischenspeichert, die Leistung jedoch nicht verbessert, wenn andere Plugins vom Typ Zwischenspeicherung im Back-End verwendet werden, und die zusätzliche Komplexität nicht wert ist. Wenn Sie es ernst meinen mit Nginx auf diese Weise, empfehle ich Ihnen, einen Blick auf diesen Artikel über ihre Erfahrungen zu werfen und zu versuchen, die dynamischen Prozesse, einschließlich der WP-seitigen Zwischenspeicherung, zu reduzieren.

Einige grundlegende Überprüfungen, wie das sorgfältige Überprüfen Ihres Apache-Zugriffs und der 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.

1
mitcho

Zunächst verwenden Sie Apache und Nginx - eine Art Redundanz. 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 an Ihrem Code dazu führt, dass ein Fehler in PHP den Speicher nicht richtig 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

0
kenkeiter