2009-12-22 7 views
4

Je pose la question d'un serveur Web qui exécute un front léger (nginx dans mon cas), avec les processus PHP accessibles via fastcgi.Combien de processus php-cgi dois-je exécuter?

J'essaie de trouver un moyen de calculer méthodiquement combien de processus PHP cgi devraient être en cours d'exécution dans la machine. Une façon d'y penser est de déterminer l'empreinte mémoire moyenne d'un processus, et de l'exécuter autant que possible dans les limites de la RAM disponible. Cependant, cela n'apporte pas l'utilisation du processeur dans la question. Puisque la CPU est le vrai goulot d'étranglement dans mon application (DB et memcache sont utilisés, mais ne sont pas les goulots d'étranglement), je pense que le nombre de base pour les processus php devrait être le nombre de processeurs disponibles. Par exemple - dans une machine à 8 cœurs, le nombre de base serait 8. En supposant que certains processus attendent la base de données ou le réseau, je ne vois aucune raison d'exécuter plus de 20 processus PHP ensemble.

Est-ce que cette façon de penser a du sens? Comment calculez-vous le nombre de processus à exécuter?

+0

Ahm, quel est le problème? Obtenez-vous de longs temps de réponse en raison de la charge élevée? Les connexions sont-elles supprimées? Les utilisateurs se plaignent-ils? Ou est-ce que cette application n'est pas encore sortie? (Je pense que la façon méthodique de calculer cela est de regarder les mesures du monde réel de votre application.) Mais oui, 8 ou 20. Ça me semble bien! :) – 0scar

+0

Il n'y a pas de problème pour le moment. L'application fonctionne sur apache-modphp, et nous passons à nginx + fastcgi. La question est montée en phase de planification. – yhager

Répondre

1

Option 1: Utilisez vos journaux Apache pour déterminer la durée aux heures de pointe.

Ajoutez la durée à votre format de journal. (quelque chose comme)

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" duration:%T/%D 

Effectuez ensuite une analyse du fichier journal pour analyser le nombre de demandes de traitement simultanées.

Option 2 (si l'application est dédiée serveur apache): Ecrire une tâche cron pour enregistrer le nombre de processus apache:

# Quick hack to log apache processes 
* * * * * date -R >> /tmp/apache_count && ps -A | grep httpd | grep -v grep | wc -l > /tmp/apache_count 
Questions connexes