ПРЕДУПРЕЖДЕНИЕ: [pool www] кажется занятым (возможно, вам нужно увеличить pm.start_servers или pm.min/max_spare_servers), нереститься

У меня есть CentOS-сервер. Системой является nginx/php-fpm. Он имеет 16 ГБ оперативной памяти. Процессоры: 8

Частота процессора: 2660.203 МГц

Почему я получаю эту ошибку в своем журнале ошибок?

php-fpm/error.log:

[02-авг-2014 17:14:04] ПРЕДУПРЕЖДЕНИЕ: [pool www] кажется занятым (вам может потребоваться увеличить pm.start_servers или pm.min/max_spare_servers), нереста 8 детей, 0 бездействий и 21 общий ребенок

Это моя конфигурация php-fpm для www-пула:

PHP-FPM/www.conf:

pm = динамический

pm.max_children = 32768

pm.start_servers = 10

pm.min_spare_servers = 10

pm.max_spare_servers = 10

pm.max_requests = 5000

Как устранить проблему?

Ответы

Ответ 1

Это жесткий файл cookie, потому что могут быть многочисленные факторы. Первая проблема с вашей конфигурацией - max_children смехотворно высока. Если каждый дочерний процесс использует 50 МБ, тогда 50 х 32768 легко истощит 16 ГБ.

Лучший способ определить max_children - выяснить, сколько использует каждый дочерний процесс, а затем указать максимальную оперативную память, которую вы хотели бы использовать php-fpm, а затем разделить значения. Например. Если у меня есть сервер на 16 ГБ, я могу запустить следующую команду, чтобы определить, сколько единиц потребляет каждый ребенок php-fpm:

ps -ylC php-fpm --sort:rss

Примечание! Может потребоваться явно указать пользователя, если php-fpm запущен под другим.

ps -ylC php-fpm --sort:rss -u www-data

где www-data - это пользователь, под которым выполняется php-fpm.

Вы находитесь в поиске столбца RSS; он записывает резидентную память и измеряется в КБ. Если у меня в среднем 50 Мбайт на процесс, и я хочу использовать максимум 10 ГБ для процессов php-fpm, то все, что я делаю, это 10000 МБ \50 МБ = 200. Поэтому на этой основе я могу использовать 200 детей для моего заявленного объема памяти.

Теперь, что касается серверов, вы захотите установить max_spare_servers на x2 или x4 количество ядер. Поэтому, если у вас есть 8-ядерный процессор, вы можете начать с значения 16 для max_spare_servers и перейти на 32.

Значение start_servers должно быть около половины значения max_spare_servers.

Вы также должны рассмотреть возможность отмены max_requests примерно до 500.

Кроме того, в дополнение к динамическому, значение pm также может быть установлено как статическое или по требованию. Static всегда будет иметь фиксированное количество серверов, работающих в любой момент времени. Это хорошо, если у вас есть постоянное количество пользователей или вы хотите гарантировать, что вы не нарушите максимальную память. По требованию будут запускаться процессы только тогда, когда это необходимо. Недостаток, очевидно, должен постоянно запускать/убивать процессы, которые, как правило, переводят на очень небольшую задержку в обработке запросов. Потенциал, вы используете ресурсы только тогда, когда они вам нужны. "Динамический" всегда запускает X количество серверов, указанных в опции start_servers, и создает дополнительные процессы по мере необходимости.

Если вы все еще испытываете проблемы с памятью, тогда подумайте о том, чтобы изменить pm на запрос по требованию.

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