PHP-FPM e continuos “saiu no sinal 11”

5

Tenho um servidor da Web HP com Xeon E5504 2ghz e 8gb de RAM, com o freebsd 8.2-p9 amd64, nginx 1.2.1 , PHP 5.3.14 , mysql 5.5.25, apc, memcached e outros pacote instalado usando portas freebsd. (arquivo conf no final da mensagem)

O meu problema é simples, tenho um monte de "saída no sinal 11" em / var / log / messages e quando a criança php-fpm morre tenho "502 gateway error" na minha site, isso é muito chato porque eu tenho muitos desses erros em um dia, nesse php-fpm conf eu forcei para uma configuração pesada com um 150 de filho do php-fpm no modo estático, e pm.max_requests = 10000000, mas no meu php-fpm log que encontrei para cada criança:

[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

e em / var / log / message para o mesmo pid:

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

para ter certeza que não é um problema de configuração de arquivos (php.ini e php-fpm.conf), eu restaurei com o original que eu encontrei no arquivo, mas nada, do que eu tentei usar spawn- fcgi, mas mesmo problema!

Do que eu tentei gerar um php-fpm.core rodando " gdb / usr / local / sbin / php-fpm ", quando a saída filho com " saiu no sinal 11 "saída do processo principal do php-fpm com" encerrado no sinal 5 (core dumping) "(que somente quando eu executo o GDB!), aqui logs e gdb backtrace results:

Como você pode ver no último link, que são as últimas linhas:

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

Alguma idéia?

Obrigado!

/ 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 (única diferença do arquivo original)

[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 (somente diferença do arquivo original)

[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
    
por RedFoxy 24.07.2012 / 18:36

2 respostas

3

O PHP 5.3.14 tem um grave bug que leva ao segfault em php-fpm. Foi corrigido em 5.3.15 e 5.4.5.

    
por 24.07.2012 / 20:26
1

Se ainda estiver acontecendo na versão recente do PHP, tente executar:

$ 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]

No final das linhas, você pode ver em qual biblioteca a falha está acontecendo, por exemplo,

error 14 in libnss_nis-2.23.so

Então você pode tentar atualizar essa biblioteca, por exemplo seguindo estes comandos como exemplo:

$ 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

Em seguida, dependendo de qual biblioteca afetada pertence, tente atualizá-la. Se isso não ajudar, tente pesquisar ou relatar os erros relevantes.

Para newrelic-X.so , consulte: Segfaults de agente PHP .

Por favor, note que PHP 5.6 e abaixo não são mais suportados. Veja: Versões Suportadas pelo PHP . Por exemplo, o suporte à ramificação do PHP 5.6 foi até 19 de janeiro de 2017, por isso é recomendado atualizar seu PHP para o ramo estável recente.

Como alternativa, quando você não pode atualizar suas versões, a ativação e a investigação de dumps principais com lis de backtraces podem apontar para a direção correta da raiz das falhas.

    
por 26.10.2017 / 15:08