PHP5-FPM статичный, динамический или по требованию?

У меня есть сервер Nginx + PHP5-FPM с несколькими сайтами с высоким трафиком.

Из моего понимания конфигурации пула PHP5-FPM я понял, что:

static = может использоваться для немедленного создания N дочерних процессов, поэтому их не нужно открывать/открывать, они уже открыты и могут быть использованы по мере необходимости, иначе они "спят".

dynamic = может использоваться для открытия ограниченного числа дочерних процессов и повторного появления, когда достигается лимит (минимальные/максимальные серверы).

ondemand = Я указываю максимальное количество дочерних процессов для создания, а затем, когда это необходимо, создаются дочерние процессы по мере необходимости и закрываются, когда они больше не нужны, поддерживая использование низкой памяти, но увеличивая время отклика в несколько миллисекунд.

Из моих тестов с веб-сайтом с высоким трафиком WordPress я заметил, что:

Если я использую "статический", веб-сайт уверен быстрее и может обрабатывать сразу большое количество одновременных подключений, но память всегда увеличивает его использование, а после N часов, похоже, используется почти полная доступная оперативная память. Поэтому я должен периодически использовать cronjob (каждые 1 час) перезагружать PHP5-FPM с перезагрузкой /etc/init.d/php5-fpm.

Если я использую "динамический", он использует меньше оперативной памяти, но после N одновременных подключений встречаются частые ошибки 502 (но, возможно, я настроил их не очень хорошо).

Если я использую "ondemand", сайт немного медленнее (например, время отклика 50/100 мс), но он может обрабатывать весь высокий трафик, не используя слишком много ОЗУ.

Таким образом, мой личный вывод состоял бы в том, что "ondemand" - действительно лучший метод для использования с точки зрения использования низкой/контролируемой памяти, единственным недостатком является время +50/100 мс в ответ, но в моем случае это не большая проблема.

Правильны ли мои предположения?

Ответ 1

Вы не указали, ПОЧЕМУ вы хотите, чтобы память была низкой. Предполагая, что этот компьютер предназначен для обслуживания PHP-FPM, поддержание низкой памяти не поможет вашему приложению в любом случае. У вас есть память, используйте ее.

Поэтому в этом случае "статический" - лучший выбор, при этом max_requests устанавливаются на что-то, что будет препятствовать утечкам памяти (если они есть) под контролем.

Если этот аппарат используется совместно с другими задачами, то поддержание низкой памяти является идеальным. В этом случае "динамический" - лучший компромисс между скоростью и использованием памяти.

"ondemand" - хороший выбор только тогда, когда двигатель PHP-FPM будет использоваться редко, а основная цель машины - что-то еще.

Ответ 2

Вы можете настроить PHP-FPM для автоматического перезапуска, обнаружив, что дети умирают в течение определенного периода времени.

В глобальной конфигурации "php-fpm.conf" вы можете установить перезагрузку PHP-FPM, если 5 дочерних процессов умирают в течение 1 минуты и ждать 10 секунд до этого.

// php-fpm.conf
emergency_restart_threshold = 5
emergency_restart_interval = 1m
process_control_timeout = 10s

Итак, вы можете продолжать использовать "динамический", не используя cron.