web-dev-qa-db-fra.com

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

Nous utilisons une instance multisite WordPress sur deux serveurs Rackspace Cloud, un Web et une base de données, avec environ 30 sites actuellement. J'ai mis Nginx au premier plan 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. Le cache total W3 est activé par défaut sur tous les sites que nous avons.

Le problème est simple: les processus Apache pèsent régulièrement entre 80 et 120 Mo. Le serveur Web dispose de 2 Go de mémoire, ce qui signifie que je reçois une quinzaine de processus jusqu'à ce que tout se passe bien. 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 s’interrogent, le problème de mémoire a été résolu en désactivant PHP xdebug (il a été activé par inadvertance lors de la configuration et a provoqué des pointes d’utilisation de mémoire aléatoires).

8
Daniel Bachhuber

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 ne chargeant que le nombre de modules dont vous avez besoin et d’autres optimisations d’optimisation permettant de réduire la mémoire. Si vous ne l'avez pas encore optimisé, modifiez-le.

Wordpress

Wordpress consomme simplement beaucoup de mémoire et n'est pas du tout optimisé. Je commencerais par remplacer la classe de base de données par quelque chose de mieux implémenté. Cela devrait gagner en rapidité 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 utilisée par une requête wordpress. Il existe une fonction d’utilisation maximale ( memory_get_peak_usage() ) que vous pouvez utiliser pour surveiller l’utilisation de la mémoire dans le monde. Si vous vous approchez des 80 à 120 Mo dont vous avez parlé, vous savez que Wordpress crée vos maux de tête. Vous souhaiterez peut-être consigner l'horodatage, la mémoire de pointe, l'heure d'exécution et l'URI demandé.

Utiliser Nginx pour servir des pages wordpress en cache vous aidera certainement, car cela empêchera Wordpress de se charger, même pour les caches "entrants" comme celui que vous utilisez. Ils sont conceptuellement cassés parce qu'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.

4
hakre

Daniel,

Je suis respectueusement en désaccord avec kenkeiter, je comprends utiliser nginx comme proxy inverse devant Apache. Harvard Law a eu un grand succès avec cette méthode et ils ont un excellent article sur la façon de procéder, 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 toutes les demandes en cache dans le système frontal, il n’améliore pas les performances et n’utilise pas de plug-ins de type cache dans le back-end et ne vaut pas la complexité supplémentaire. Si vous envisagez sérieusement d'utiliser nginx de cette manière, je vous recommande de jeter un coup d'œil à cet article sur son expérience et d'essayer de réduire les processus dynamiques, y compris la mise en cache côté WP.

Certaines tâches de base, telles que l’analyse attentive de votre accès Apache et de vos journaux d’erreur, pour déterminer quels types de requêtes doivent être effectuées de manière dynamique et essayer de réduire ce type de cas peuvent également constituer un bon début.

1
mitcho

Tout d’abord, vous utilisez Apache et Nginx - en quelque sorte redondants. Vous devriez utiliser Nginx/FastCGI avec PHP. Le tutoriel sur ce site devrait aider. Sinon, ma meilleure hypothèse est que certains changements récents apportés à votre code sont à l'origine d'un bogue 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

0
kenkeiter