Apache Error AH00052: child pid Segmentation fault (11) — Отладка
Рабочие процессы Apache аварийно завершаются при обработке определенных клиентских запросов. В файле error.log массово фиксируются фатальные сбои управления памятью: [core:notice] [pid 1234] AH00052: child pid 5678 exit signal Segmentation fault (11). Клиент получает оборванное соединение (ERR_EMPTY_RESPONSE) или статус 502/500.
| Компонент | Типичный виновник | Механизм сбоя |
|---|---|---|
| PHP Модули / Расширения | php-opcache, imagick, xdebug, ionCube | Несовместимость ABI версий расширений и ядра PHP |
| Модули Apache C/C++ | mod_security, mod_pagespeed, mod_ssl | Обращение к нулевому указателю (Null Pointer Dereference) |
| MPM Prefork vs Event | Потоконебезопасные C-библиотеки | Race condition при работе потоков в mpm_event |
- Apache не падает полностью (мастер-процесс жив), но постоянно пересоздает упавшие дочерние воркеры.
- Сбой часто воспроизводится при выполнении тяжелых скриптов, генерации PDF, ресайзе картинок или парсинге сложных WAF-правил.
- Включите генерацию дампов памяти (Core Dumps) в файле
/etc/security/limits.confи конфигурации Apache:# В /etc/apache2/apache2.conf или /etc/httpd/conf/httpd.conf: CoreDumpDirectory /tmp - Установите системный лимит на размер core-файлов:
sudo sysctl -w fs.suid_dumpable=2 ulimit -c unlimited - При повторном падении проанализируйте core dump с помощью GDB или утилиты coredumpctl:
# Для systemd-coredump: sudo coredumpctl gdb # Внутри gdb выполните команду получения трассировки стека: (gdb) bt (gdb) quit - Если стек указывает на сбой внутри
php7.x.so/php8.x.so, временно отключите подозрительные расширения (Xdebug, ionCube, Zend OPcache):sudo phpdismod xdebug sudo phpdismod opcache sudo systemctl restart apache2 - Если используется многопоточный модуль mpm_event или mpm_worker совместно со старыми потоконебезопасными библиотеками, переключитесь на классический изолированный процессорный модуль
mpm_preforkили вынесите PHP в отдельный демон PHP-FPM черезmod_proxy_fcgi. - Обновите все системные библиотеки и модули до актуальных релизов через пакетный менеджер.
mod_php с многопоточными MPM (Worker/Event) категорически не рекомендуется. Переход на связку mpm_event + mod_proxy_fcgi + PHP-FPM полностью изолирует сбои PHP-скриптов от процессов веб-сервера Apache.Частые вопросы (FAQ)
Что означает код сигнала 11 (Segmentation fault)?
Сигнал SIGSEGV (11) генерируется ядром ОС, когда процесс пытается прочитать или записать данные по адресу оперативной памяти, который ему не принадлежит, либо пытается выполнить запись в область памяти 'только для чтения'.
Как изолировать проблемный URL, вызывающий segfault?
Повысьте уровень логирования LogLevel debug в конфиге Apache и сопоставьте PID упавшего процесса из error.log с последним запросом в access.log.
Помогает ли перезапуск Apache при периодических сегфолтах?
Перезапуск лишь временно очищает память, но при поступлении аналогичного запроса рабочий процесс снова упадет с сигналом 11.
Где сохраняются core dump файлы по умолчанию в Linux?
В зависимости от настроек ядра: в каталоге, указанном в /proc/sys/kernel/core_pattern (обычно обрабатывается systemd-coredumpd или сохраняется в каталоге CoreDumpDirectory).