Назад | Перейти на главную страницу

Форк Apache зависает при системном вызове futex

У нас есть сервер хостинга LAMP, Nginx в качестве интерфейса для статических файлов и обратный прокси для Apache. Apache + mod_php обслуживает запросы php.

Apache

Server Version: Apache/2.4.10 (Debian) mod_fastcgi/mod_fastcgi-SNAP-0910052141 PHP/5.6.29-0+deb8u1
Server MPM: prefork

PHP

PHP Version 5.6.29-0+deb8u1
OPCache enabled
max_execution_time 60

Скрипты PHP умирают с ошибкой Превышено максимальное время выполнения 60 секунд, но вилка apache все еще пытается обслуживать эти запросы.

Дочерний процесс Strace apache пуст или показывает системный вызов futex

strace -p <PID>
Process <PID> attached
futex(0x7f16c503890, FUTEX_WAIT_PRIVATE, 2, NULL

На странице состояния сервера показано, что такие процессы находятся в состоянии «Отправка ответа» или «Изящное завершение» с очень большим количеством секунд с момента начала последнего запроса, превышающим значение тайм-аута Apache.

Apache и php являются стандартными основными пакетами debian jessie. Версия Debian - 8.7

Что может быть не так и как мы можем изменить настройки apache, чтобы исправить эти зависшие вилки с такими длинными запросами php.

После нескольких дней расследования я обнаружил, что проблема связана с расширением php-xdebug. Зависшие вилки исчезли после отключения xdebug из включенных модулей php.