Я установил сервер с Nginx и PHP5-FPM, и все работает нормально. Однако по мере того, как я добавляю на сервер все больше и больше сайтов, я вижу, что использование памяти неуклонно растет, и пришел к выводу, что «виноват» PHP5-FPM.
Сейчас я создаю отдельный пул PHP5-FPM для каждого сайта и настраиваю этот пул в соответствии с ожидаемым трафиком. Тем не менее, при наличии достаточного количества сайтов у меня в конце концов будет сервер, который будет поддерживать довольно большое количество «детей» PHP5-FPM, которые просто ждут своей работы.
Я только что узнал о по запросу, по требованию Режим PHP5-FPM, который позволяет мне настроить PHP5-FPM таким образом, чтобы дочерние процессы разветвлялись только тогда, когда это действительно необходимо, а затем оставались активными в течение заданного времени для обработки.
Однако я не могу найти слишком много подробностей по этому поводу. Что меня больше всего интересует, так это то, как переменные pm.max_children и pm.max_requests влиять на по запросу, по требованию режим (если вообще). Я предполагаю, что переменные pm.start_servers, pm.min_spare_servers, pm.max_spare_servers не относится к по запросу, по требованию Режим.
вы правы, start_servers, min_spare_servers и max_spare_servers не относятся к режиму ondemand. Следующие переменные применимы к режиму ondemand:
Когда вы устанавливаете pm = ondemand, FPM будет форкнуть дочерние элементы, как только ему понадобится, всегда сохраняя количество дочерних элементов меньше или равным pm.max_children, поэтому эта переменная является верхним пределом количества дочерних элементов, разветвляемых одновременно.
Две другие переменные позволяют указать, когда дочерние элементы должны быть уничтожены:
pm.process_idle_timeout устанавливает, как долго дети ждут без работы, прежде чем они будут уничтожены. Он определяется в секундах.
pm.max_requests определяет, сколько запросов (по одному) дочерние элементы будут обрабатывать, прежде чем они будут уничтожены. Например, если вы установите для этой переменной значение 50, дочерний элемент обработает 50 запросов и закроется. Если главному процессу FPM по-прежнему нужны другие дочерние элементы, он создаст новый.
В моей компании мы используем режим ondemand в FPM, и мы используем pm.max_requests, чтобы принудительно перезапустить дочерние элементы fpm и избежать чрезмерного использования памяти.
Надеюсь это поможет,
Приветствую.
Это может быть ошибка https://bugs.php.net/bug.php?id=72935
TL; DR; Если два клиента подключаются к PHP-FPM в режиме ondemand на одном и том же сокете unix до того, как accept () произойдет в дочернем элементе, только один получит accept () ed.