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

PHP-FPM и непрерывный «выход по сигналу 11»

У меня есть веб-сервер Hp с Xeon E5504 2 ГГц и 8 ГБ оперативной памяти, с freebsd 8.2-p9 amd64, nginx 1.2.1, PHP 5.3.14, mysql 5.5.25, apc, memcached и другие пакеты, установленные с использованием портов freebsd. (файл conf в конце этого сообщения)

Моя проблема проста, у меня много "выходов по сигналу 11" в / var / log / messages, а когда умирает ребенок php-fpm, у меня на сайте есть "ошибка шлюза 502", это действительно скучно, потому что я много этих ошибок за день, в этом php-fpm conf я принудил его к тяжелой конфигурации со 150 дочерними элементами php-fpm в статическом режиме и pm.max_requests = 10000000, но в моем журнале php-fpm Для каждого ребенка я нашла:

[19-Jul-2012 18:58:14.666913] NOTICE: pid 84563, fpm_children_make(), line
421: [pool www] child 84717 started
[19-Jul-2012 18:58:14.666984] DEBUG: pid 84563, fpm_event_loop(), line 409:
event module triggered 1 events
[19-Jul-2012 18:58:17.403217] DEBUG: pid 84563, fpm_event_loop(), line 409:
event module triggered 2 events
[19-Jul-2012 18:58:17.407442] DEBUG: pid 84563, fpm_got_signal(), line 72:
received SIGCHLD
[19-Jul-2012 18:58:17.407552] WARNING: pid 84563, fpm_children_bury(), line
252: [pool www] child 84563 exited on signal 11 (SIGSEGV) after 39.849444
seconds from start

и в / var / log / message для того же pid:

Jul 19 18:58:14 web1 kernel: pid 84563 (php-fpm), uid 1001: exited on signal 11

чтобы быть уверенным, что это не проблема с файлами конфигурации (php.ini и php-fpm.conf), я восстановил его исходным, который я нашел в архиве, но ничего, чем я пытался использовать spawn-fcgi, но такая же беда!

Затем я попытался создать запущенный php-fpm.core "ГДБ / USR / местные / SBIN / PHP-ФПМ", когда ребенок выходит с"вышел по сигналу 11"php-fpm выход из основного процесса с помощью"вышел по сигналу 5 (ядро сброшено)"(это только когда я запускаю его, выкидывает GDB!), здесь журналы и результаты трассировки gdb:

Как вы можете видеть в последней ссылке, это последние строки:

#659 0x0000000801534de0 in ?? () from /lib/libc.so.7
#660 0x0000000000000001 in ?? ()
#661 0x00007fffffffec08 in ?? ()
#662 0x000000000000000f in ?? ()
Cannot access memory at address 0x800000000000

Любые идеи?

Спасибо!

/ var / log / messages:

Jul 24 17:58:41 web1 kernel: pid 3887 (php-fpm), uid 1001: exited on signal 11
Jul 24 17:58:42 web1 kernel: pid 3998 (php-fpm), uid 1001: exited on signal 11
Jul 24 17:58:42 web1 kernel: pid 3895 (php-fpm), uid 1001: exited on signal 11
Jul 24 17:58:42 web1 kernel: pid 3892 (php-fpm), uid 1001: exited on signal 11
Jul 24 17:58:43 web1 kernel: pid 3889 (php-fpm), uid 1001: exited on signal 11
Jul 24 17:58:43 web1 kernel: pid 3898 (php-fpm), uid 1001: exited on signal 11
Jul 24 17:58:44 web1 kernel: pid 3886 (php-fpm), uid 1001: exited on signal 11
Jul 24 17:58:44 web1 kernel: pid 3999 (php-fpm), uid 1001: exited on signal 11
Jul 24 17:58:45 web1 kernel: pid 3896 (php-fpm), uid 1001: exited on signal 11
Jul 24 17:58:45 web1 kernel: pid 4000 (php-fpm), uid 1001: exited on signal 11
Jul 24 17:58:45 web1 kernel: pid 3893 (php-fpm), uid 1001: exited on signal 11
Jul 24 17:58:55 web1 kernel: pid 3885 (php-fpm), uid 0: exited on signal 5 (core dumped)

php.ini (только отличие от исходного файла)

[PHP]
memory_limit = 128M

apc.enabled=1
apc.shm_size=128M
apc.ttl=0
apc.mmap_file_mask=/tmp/apc/apc.XXXXXX

error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTICE
display_errors = On
display_startup_errors = On
track_errors = On
html_errors = On

upload_max_filesize = 4M

[Date]
date.timezone = Europe/Rome

[browscap]
browscap = /home/serverweb/etc/php/browscap.ini

php-fpm.conf (только отличие от исходного файла)

[global]
error_log = /home/serverweb/log/php-fpm/error.log
log_level = debug

emergency_restart_threshold = 10
emergency_restart_interval = 1m
process_control_timeout = 10s

process.max = 0

[www]
user = web
group = web

listen = 127.0.0.1:9999
listen.allowed_clients = 127.0.0.1

pm = static
pm.max_children = 16

pm.max_requests = 10000000

slowlog = /home/serverweb/log/php-fpm/$pool.log.slow

PHP 5.3.14 имеет серьезная ошибка что приводит к сбою в php-fpm. Это было исправлено в 5.3.15 и 5.4.5.

Если это все еще происходит в последней версии PHP, попробуйте запустить:

$ dmesg | grep segfault | tail -10
php-fpm[327]: segfault at 834ac30 ip 000000000834ac30 sp 00007ffc112d1b78 error 14 in libnss_nis-2.23.so[7fe02b461000+b000]
php-fpm[329]: segfault at 834ac30 ip 000000000834ac30 sp 00007ffc112d1b78 error 14
php-fpm[331]: segfault at 834ac30 ip 000000000834ac30 sp 00007ffc112d2278 error 14 in libnss_nis-2.23.so[7fe02b461000+b000]

В конце строк вы можете увидеть, в какой библиотеке происходит сбой, например

error 14 in libnss_nis-2.23.so

Так что вы можете попробовать обновить эту библиотеку, например. следуя этим командам в качестве примера:

$ locate libnss_nis-2.23.so
/lib/x86_64-linux-gnu/libnss_nis-2.23.so
$ dpkg -S /lib/x86_64-linux-gnu/libnss_nis-2.23.so

Затем, в зависимости от того, к какой библиотеке принадлежит проблема, попробуйте обновить ее. Если это не поможет, попробуйте поискать или сообщить о соответствующих ошибках.

Для newrelic-X.so, видеть: Сбои агента PHP.


Обратите внимание, что PHP 5.6 и ниже больше не поддерживаются. Видеть: Поддерживаемые версии PHP страница. Например, поддержка ветки PHP 5.6 была до 19 января 2017 года, поэтому рекомендуется обновить PHP до последней стабильной ветки.

В качестве альтернативы, когда вы не можете обновить свои версии, включение и исследование дампов ядра с помощью списков трассировок может указать вам правильное направление корня сбоев.