На странице руководства php-fpm указано, что ответ на сигнал USR2 следующий: «плавная перезагрузка всех рабочих + перезагрузка fpm conf / binary». Однако при тестировании я обнаружил, что перезагрузка фактически убивает рабочих, обрабатывающих запросы. Я ожидал, что запросы будут завершены до того, как процессы будут убиты и повторно созданы.
Это сломано, мои ожидания неверны или тест недействителен?
Моя тестовая установка:
Контейнер Ubuntu 16.04 LXC
установить php7.0-fpm и nginx
php для сна и вывода обратного отсчета каждую секунду
отправить запрос на сон на 30 секунд через curl
перезагрузить через systemctl
Результат испытаний:
запрос был убит сразу после перезагрузки
Я только что нашел свой ответ: вариант конфигурации process_control_timeout
было установлено значение по умолчанию 0 секунд. На мой взгляд, ужасный дефолт.
Я установил process_control_timeout
к стоимости 30s
чтобы дочерние процессы могли завершиться и завершить работу до 30 секунд, прежде чем они будут принудительно уничтожены. Однако это вступает в силу только при последующих перезагрузках, так как первая перезагрузка требуется, чтобы это изменение вступило в силу.