PHP-FPM ест память и создает много пулов

Я настроил свой nginx с помощью php-fpm. каждый vhost имеет свой собственный unix-сокет и отдельный POOL.
Но проблема в том, что php-fpm создает 7 потоков для каждого пула конфигурации, который я создал в /etc/php5/fpm/pool.d/

, почему? и как я могу определить, что пул создается только при просмотре URL, относящегося к VHOST.

enter image description here

5
задан 19 December 2013 в 19:43

2 ответа

Число дочерних элементов контролируется директивами конфигурации менеджера процессов в файле конфигурации пула. Я полагаю, что текущие настройки: pm = static с pm.max_children = 6 или pm = dynamic с pm.start_servers = 6. Один процесс будет процессом контроля, другие будут детьми, готовыми обрабатывать запросы. Если у вас настроено только 5, а не 6 дочерних элементов, я должен признаться, что не знаю, для чего используется этот последний процесс. На больших сайтах с высокой пропускной способностью такая конфигурация со многими готовыми к использованию дочерними элементами имеет смысл, но в ограниченной (вероятно, виртуальной) среде с ограниченным объемом памяти, в которой время от времени ожидается выполнение только PHP-сценариев, может возникнуть другая конфигурация более уместно.

Для этого отредактируйте файлы конфигурации пула и установите pm = ondemand . Тогда дети будут созданы только для обработки запросов. Это будет означать меньшее потребление памяти при отсутствии активных запросов, хотя это также может означать больше времени, необходимого для создания дочернего элемента. Последнее может быть уменьшено путем выбора разумного pm.process_idle_timeout, чтобы нормальное число php-процессов оставалось бездействующим, в то время как пользователи могут вскоре снова их использовать. Это «нормальное число» контролируется pm.max_children .

Примечание: Этот совет основан на моем опыте работы с Debian 7, но он должен применяться и к Ubuntu.

0
ответ дан 19 December 2013 в 19:43

Многие люди рекомендуют использовать pm = ondemand для экономии памяти. Однако это также означает, что ваше время до первого байта (или ответа сервера) будет очень большим, потому что, если ваш веб-сервер не имел недавних посещений, модуль php-fpm должен будет сначала создать дочерний элемент, прежде чем отвечать на запрос. Если вы используете pm = dynamic, это означает, что у вас всегда будет хотя бы 1 ребенок, готовый ответить на запрос клиента. Следующее загрузит 1 ребенка на пользователя после перезапуска php-fpm

pm=dynamic
pm.start_servers=1
pm.min_spare_servers=1
0
ответ дан 19 December 2013 в 19:43

Другие вопросы по тегам:

Похожие вопросы: