Ошибка PHP и apache22 core dumped
На сервере под управлением FreeBSD 8.3-RELEASE работает web-сервер apache22-2.2.23 с прикрученным языком PHP5. После сегодняшнего обновления с php5-5.4.7 до php5-5.4.9 и перезагрузки apache, последний отказался стартовать, сваливаясь в core dump. Ошибка dmesg:pid 6062 (httpd), uid 0: exited on signal 11 (core dumped) . |
Такое у меня уже происходило однажды, поэтому рецепт “лечения” был уже известен. Такая ошибка возникала ранее из-за неправильного загружаемого extension языка php5 (в составе порта lang/php5-extensions). Проверить, что это так и есть, можно простыми командами:
# php -v Ошибка сегментации: 11 (core dumped) # dmesg pid 6066 (php), uid 0: exited on signal 11 (core dumped)
А в корне / находилось уже два core dump, от apache22 и php5:
# ls -Al / | grep core -rw------- 1 root wheel 44834816 17 дек 9:22 httpd.core -rw------- 1 root wheel 9732096 17 дек 9:26 php.core
Чтобы выяснить, какой из extensions вызывает данную ошибку, необходимо в файле по пути /usr/local/etc/php/extensions.ini
закомментировать все вызываемые extensions с помощью ;
и затем поочередно раскомментировать их по одному, проверяя после каждой операции командой php -v
. Выполняя данный цикл команд удалось выяснить, что проблема была в расширении recode.so.
# nano -w /usr/local/etc/php/extensions.ini ... extension=iconv.so ;extension=recode.so extension=pcntl.so ... # php -v PHP 5.4.9 (cli) (built: Dec 17 2012 09:37:38) (DEBUG) Copyright (c) 1997-2012 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies
С закомментированным ;extension=recode.so
apache тоже стартовал без ошибок:
# /usr/local/etc/rc.d/apache22 start Performing sanity check on apache22 configuration: Syntax OK Starting apache22. # netstat -tan | grep LIST | grep 80 tcp4 0 0 *.80 *.* LISTEN
если модуль recode.so поставить первым в списке extensions.ini то проблема так же будет решена ;)
fenrir спасибо за совет! у меня такое уже бывало, если повторится – попробую по вашему рецепту! :)
Дополню предидущего автора – не обязательно в самое начало, главное – перед расширением imap, ибо, если imap уже подгружен, попытка подгрузить recode валит php в кору.
Спасибо, Ринат! Однако непонятная тенденция: проблема существует (и не в единичном случае), но разрабы почему-то не могут ее предотвратить…
для более быстрого поиска сбойного модуля лучше использовать gdb
gdb “имя исполняемого файла создавшего core file” “core файл”
например:
gdb ./cgi-bin/php5b ./public_html/bitrix/admin/core.522
команда bt выдаст последние действия перед крешем например в моём случае
#0 0×00002ad9188b029a in match () from /opt/pcre/lib/libpcre.so.0
или
#0 0×00002ad7abd61e5b in ?? () from /usr/local/Zend/lib/Guard-5.5.0/php-5.3.x/ZendGuardLoader.so
с наилучшими пожеланиями