пятница, 1 мая 2015 г.

Проблема с eaccelerator и генерация coredump для php-fpm

Действия происходят на CentOS 6.5, в других дистрибутивах пути к конфигам могут отличаться.

После сброса кэша eaccelerator, почему-то nginx стал отдавать ошибку 502 Bad Gateway.
Интерено то, что на странице с phpinfo eaccelerator работал, а с самим сайтом нет.

Стал смотреть логи.
В логах php-fpm были замечены строки:
# tail -1 /var/log/php-fpm/error.log
WARNING: [pool user] child 6711 exited on signal 11 (SIGSEGV - core dumped) after 4.257027 seconds from start


Решено было снять coredump.
Указываем, как будут именоваться coredump'ы:
# echo '/tmp/coredump-%e.%p' > /proc/sys/kernel/core_pattern
они будут иметь имя /tmp/coredump-число

Включаем coredump в php-fpm:
# vim /etc/php-fpm.conf
rlimit_core = unlimited

Так как я работал с eaccelerator, включаю его:
# vim /etc/php.d/eaccelerator.ini
eaccelerator.enable="1"

Рестарт php-fpm:
# service php-fpm restart

Смотрим в каталог /tmp, видим, что создался coredump:
# ls /tmp/coredump-php-fpm.10066 

Отключаю eaccelerator (так как если он включен, сайты не работают):
# vim /etc/php.d/eaccelerator.ini
eaccelerator.enable="0"

# service php-fpm restart

Запускаем отладку, видим ошибку:
# gdb /usr/sbin/php-fpm /tmp/coredump-php-fpm.10066
...
Missing separate debuginfos, use: debuginfo-install php-fpm-5.3.3-40.el6_6.x86_64
---Type <return> to continue, or q <return> to quit---
q

Исправляем ее:
# debuginfo-install php-fpm-5.3.3-40.el6_6.x86_64

После этого можно посмотреть backtrace, мне это к сожалению ничего не дало:
# gdb /usr/sbin/php-fpm /tmp/coredump-php-fpm.10066
...
(gdb) bt
#0  zend_hash_find (ht=0x0, arKey=0x7f19abe6bff8 "rzhfgpg", nKeyLength=8, pData=0x7fff599d2bc8) at /usr/src/debug/php-5.3.3/Zend/zend_hash.c:878
#1  0x000000000060e606 in zend_symtable_find (result=0x7f19a9cee2c8, container_ptr=<value optimized out>, dim=0x7f19ac5edb88, dim_is_tmp_var=<value optimized out>, 
    type=<value optimized out>) at /usr/src/debug/php-5.3.3/Zend/zend_hash.h:360
#2  zend_fetch_dimension_address_inner (result=0x7f19a9cee2c8, container_ptr=<value optimized out>, dim=0x7f19ac5edb88, dim_is_tmp_var=<value optimized out>, 
    type=<value optimized out>) at /usr/src/debug/php-5.3.3/Zend/zend_execute.c:805
#3  zend_fetch_dimension_address_read (result=0x7f19a9cee2c8, container_ptr=<value optimized out>, dim=0x7f19ac5edb88, dim_is_tmp_var=<value optimized out>, 
    type=<value optimized out>) at /usr/src/debug/php-5.3.3/Zend/zend_execute.c:1031
#4  0x000000000060ff0a in ZEND_FETCH_DIM_R_SPEC_VAR_CONST_HANDLER (execute_data=0x7f19a9ced970) at /usr/src/debug/php-5.3.3/Zend/zend_vm_execute.h:9899
#5  0x00000000005ca8d0 in execute (op_array=0x1171760) at /usr/src/debug/php-5.3.3/Zend/zend_vm_execute.h:107
#6  0x00000000005a4aed in zend_execute_scripts (type=8, retval=0x0, file_count=3) at /usr/src/debug/php-5.3.3/Zend/zend.c:1235
#7  0x0000000000552b78 in php_execute_script (primary_file=0x7fff599d52b0) at /usr/src/debug/php-5.3.3/main/main.c:2268
#8  0x0000000000636e98 in main (argc=<value optimized out>, argv=<value optimized out>) at /usr/src/debug/php-5.3.3/sapi/fpm/fpm/fpm_main.c:1925

Проблема с eaccelerator решилась как-то странно, с немного измененным конфигом, удалением кэша и рестарта php-fpm:
# vim /etc/php.d/eaccelerator.ini
# rm -rf /var/cache/php-eaccelerator/*
# service php-fpm restart

Комментариев нет: