Quel est le moyen idéal pour profiler l'utilisation de la mémoire WordPress?

8

Nous exécutons une instance multisite WordPress sur deux serveurs Rackspace Cloud, un web et une base de données, avec une trentaine de sites actuellement. J'ai mis Nginx devant pour les actifs statiques et Apache gère toutes les requêtes dynamiques. J'ai également configuré Memcached pour la base de données et la mise en cache du code op APC pour PHP. W3 Total Cache est activé par défaut sur tous les sites que nous avons.

Il est méchant rapidement avec un problème: les processus Apache pèsent régulièrement entre 80 et 120 Mo. Le serveur Web a 2 Go de mémoire, ce qui signifie que j'obtiens environ 15 processus jusqu'à ce que les choses tournent au ralenti. Les processus ne devraient évidemment pas être aussi importants, mais je ne comprends pas pourquoi ils le sont.

Quelle est la bonne stratégie pour identifier ce qui se passe?

Merci d'avance!

Mise à jour 10/2/10: Pour ceux qui se demandent, la résolution du problème de problème de mémoire a été de désactiver PHP xdebug (a été activé par inadvertance sur la configuration et a provoqué des pics d'utilisation de la mémoire aléatoires).

Daniel Bachhuber
la source

Réponses:

4

La quantité de mémoire de processus apache dont vous parlez (80 à 120 Mo par processus) peut être divisée en deux raisons.

  1. Apache
  2. Wordpress

Apache

Vous pouvez optimiser Apache en chargeant uniquement le nombre de modules dont vous avez besoin et d'autres ajustements d'optimisation qui réduiront la mémoire. Si vous ne l'avez pas encore optimisé, donnez-lui quelques ajustements.

Wordpress

Wordpress consomme juste beaucoup de mémoire et n'est pas du tout très optimisé. Je commencerais par remplacer la classe de base de données par quelque chose de plus correctement implémenté. Cela devrait gagner en vitesse et réduire considérablement l'utilisation de la mémoire. À côté de cela, je n'ai pas grand-chose à suggérer. Ne pas utiliser Worpdress n'est pas considéré comme utile, je suppose.

Stratégies

Pour savoir ce qui se passe, vous devez suivre la quantité de mémoire occupée par une demande wordpress. Il existe une fonction get peak usage ( memory_get_peak_usage()) que vous pouvez utiliser pour surveiller l'utilisation de la mémoire de travail. Si cela se rapproche des 80 à 120 Mo dont vous avez parlé, vous savez que wordpress crée vos maux de tête. Vous souhaiterez peut-être enregistrer l'horodatage, la mémoire de pointe, le temps d'exécution et l'URI demandé.

L'utilisation de Nginx pour servir des pages wordpress en cache vous aidera très certainement car elle empêchera wordpress de se charger - même pour les caches "entrants" comme celui que vous utilisez. Ils sont conceptuellement cassés car ils sont un plugin wordpress, donc au moins une partie de wordpress doit être chargée même pour les résultats mis en cache.

hakre
la source
1

Daniel,

Je suis en désaccord avec respect avec kenkeiter, je comprends utiliser nginx comme proxy inverse devant Apache. Harvard Law a eu beaucoup de succès avec cette méthode et ils ont un excellent article sur la façon dont ils le font, avec un lien vers leur plugin WordPress qui facilite l'interface avec nginx:

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

Ce qu'ils ont découvert à Harvard Law, c'est que, avec nginx mettant essentiellement en cache toutes les demandes dans le front-end, cela n'améliore pas réellement les performances pour utiliser d'autres plugins de type cache dans le backend, et ne vaut pas la complexité supplémentaire. Si vous envisagez sérieusement d'utiliser nginx de cette manière, je vous recommande de lire cet article sur leur expérience et d'essayer de réduire les processus dynamiques, y compris la mise en cache côté WP.

Quelques recherches de base comme regarder attentivement vos journaux d'accès et d'erreur Apache pour voir quels types de requêtes doivent être effectuées dynamiquement et essayer de réduire ces cas peuvent également être un bon début.

mitcho
la source
0

Eh bien, tout d'abord, vous utilisez Apache et Nginx - une sorte de redondance. Vous devez utiliser Nginx / FastCGI avec PHP. Le tutoriel sur ce site devrait vous aider. Sinon, ma meilleure supposition est que certaines modifications récentes apportées à votre code entraînent un bug dans PHP pour ne pas libérer la mémoire correctement. Il n'y a aucune raison qu'un processus Apache consomme autant de mémoire.

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

Bonne chance!

@kenkeiter


la source
Nginx / FastCGI serait génial, mais il est hors de portée de résoudre ce problème
Daniel Bachhuber