Сколько процессов php-cgi мне нужно запустить? - PullRequest
5 голосов
/ 22 декабря 2009

Я спрашиваю о веб-сервере с легким фронтом (в моем случае nginx), с процессами PHP, доступными через fastcgi.

Я пытаюсь найти способ методически рассчитать, сколько процессов PHP cgi должно быть запущено на машине.

Один из способов думать об этом - вычислить средний объем памяти процесса и выполнить как можно больше в пределах доступного ОЗУ. Тем не менее, это не приводит к использованию процессора в вопросе.

Поскольку CPU является реальным узким местом в моем приложении (DB и memcache используются, но не являются узкими местами), я думаю, что базовое число для процессов php должно быть числом доступных процессоров.

Например, в 8-ядерном компьютере базовое число будет равно 8. Предполагая, что некоторые процессы ожидают базы данных или сети, я не вижу причин для запуска более 20 процессов PHP в целом.

Имеет ли такой способ мышления смысл? Как вы рассчитываете, сколько процессов нужно запустить?

1 Ответ

1 голос
/ 06 января 2011

Опция 1 : Используйте ваши логи apache для определения продолжительности в пиковое время.

Добавьте продолжительность в ваш формат журнала. (что-то вроде)

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

Затем выполните синтаксический анализ файла журнала, чтобы проанализировать количество одновременно обрабатываемых запросов.

Вариант 2 (если приложение имеет выделенный сервер Apache): написать задание cron для регистрации количества процессов Apache:

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