При диагностике работы web-сервера, обнаружил ошибки, которые сыпались в лог httpd-error.log:
[Sun Feb 02 10:13:51.778392 2014] [core:notice] [pid 73431] AH00052: child pid 82474 exit signal Illegal instruction (4) [Sun Feb 02 10:20:07.346392 2014] [core:notice] [pid 73431] AH00052: child pid 93379 exit signal Illegal instruction (4) [Sun Feb 02 10:30:58.217398 2014] [core:notice] [pid 73431] AH00052: child pid 93375 exit signal Illegal instruction (4) [Sun Feb 02 10:32:36.356384 2014] [core:notice] [pid 73431] AH00052: child pid 20375 exit signal Illegal instruction (4) |
Версии установленного ПО:
# uname -opr # php -v |
После длительного копания что и как, обнаружил, что ошибку вызывает библиотека pcre, которая вместо динамической памяти использовала стек, что при определенных условиях вызывало его переполнение, и, соответственно, родительский процесс "падал". Узнать, что pcre работает с использованием стека можно следующим образом:
# pcretest -C | grep 'Match recursion' Match recursion uses stack |
Решение - пересобрать pcre (/usr/ports/devel/pcre), и отключить опцию STACK_RECURSION.
После пересборки порта, проверяем, как работает pcre:
# pcretest -C | grep 'Match recursion' Match recursion uses heap |
Теперь можно смело увеличивать значение переменных php.ini, которые касаются pcre, не боясь преполнения стека. Для этого необходимо расскоментировать следующие опции в php.ini:
pcre.backtrack_limit = 100000 pcre.recursion_limit = 100000 |
Чтобы изменения вступили в силу, необходимо перезапустить веб-сервер:
# sh /usr/local/etc/rc.d/apache24 restart |
После этого Apache перестал "крашиться" и более проблем не замечалось.
Последние комментарии
17 недель 4 дня назад
41 неделя 5 дней назад
2 года 42 недели назад
3 года 12 недель назад
3 года 35 недель назад
3 года 50 недель назад
3 года 51 неделя назад
4 года 2 недели назад
4 года 13 недель назад
4 года 17 недель назад