У нас возникла проблема, из-за которой процессы PHP Apache (2.4.10) FCGID (2.3.9) зависают в «рабочем» состоянии в Debian.
Эти PHP-процессы не занимают системных ресурсов (помимо их ранее использованного объема памяти при обработке предыдущих запросов) и простаивают. Они по-прежнему подключены к правильному логическому родительскому процессу (процесс apache2, обрабатывающий запросы на этом виртуальном хосте).
Подключение к ним strace показывает, что они находятся в состоянии: accept(0, мы предполагаем прослушивание для получения следующего запроса.
Регистрация приложения, добавленная в нашу обработку PHP в функции handle_shutdown, показывает, что все эти запросы попали в функцию handle_shutdown (без ошибок) - как и следовало ожидать для любого обработанного запроса PHP (поскольку вы всегда нажимаете функцию handle_shutdown), так что к лучшему насколько нам известно, весь запрос «успешен». Ответ 200 регистрируется в журнале доступа apache.
Однако раздел apachectl fullstatus fcgid показывает, что процесс «Работает», а не «Готов».
Изменение коэффициентов повторного использования в настройках Fcgid (максимальное количество запросов, время жизни, начало установки тайм-аутов выше или ниже и т. д.), по-видимому, не влияет на их регулярность.
Изящный apachectl успешно очищает все бездействующие «рабочие» потоки и возвращается в нормальное состояние.
Однако, конечно, если мы оставим это без наблюдения, в конечном итоге каждый из процессов рано или поздно окажется в этом состоянии, пока мы не получим полностью простаивающий сервер, где все наши максимальные процессы (100) все застряли «Ожидание». "но без дела. В этот момент использование памяти является разумным, и, конечно, ЦП, сеть и др. падают до незначительного уровня, поскольку единственный запрос, на который ответит сервер, — это полный статус (поскольку он не попадает в раздел PHP vhost)