
Estou executando o Centos 7 com php-fpm 5.4. Estou encontrando um erro SIGSEGV (sinal 11) em meus logs de erros do php-fpm e quero depurá-lo.
Eu segui o conselho dephp5 fpm: como você gera core dump do segfault?mas o php-fpm ainda nem está tentando gerar core dumps. No log de erros do php-fpm:
WARNING: [pool website.com] child 26953 exited on signal 11 (SIGSEGV) after 0.931337 seconds from start
Se um core dump tivesse sido gerado, ele seria lido, (SEGSEGV - core dumped)
mas não é.
Responder1
Eu também tive problemas com isso. Parece que no centos o php-fpm
processo mestre é iniciado com privilégios de root, que então inicia os pools individuais com privilégios reduzidos (usuário php-fpm
no centos por padrão).
O obstáculo para mim, e suspeito para você também, é que se um processo alterou seus próprios privilégios de execução, não será permitido produzir um arquivo de dump principal, a menos que /proc/sys/fs/suid_dumpable
esteja configurado para permitir isso. Veja informações sobre este controle em nível de kernelaqui.
Responder2
Consegui resolver esse problema com o seguinte:
- Adicionado ao arquivo /etc/systemd/system.conf:
DefaultLimitCORE=infinity
- Alterado o kernel.core_pattern:
sysctl kernel.core_pattern='| /usr/lib/systemd/systemd-coredump %p %u %g %s %t %c %e'
- Configuração recarregada do systemd:
systemctl daemon-reload
Como uma etapa extra para o php-fpm, a seguinte diretiva precisa ser definida nos arquivos individuais do pool php-fpm que você deseja monitorar:
rlimit_core = ilimitado
O diretório padrão para o programa systemd-coredump é /var/lib/systemd/coredump
assim, você deverá ver os arquivos de despejo gerados aqui.
Responder3
Usuário do switcher PHP-FPM antes de iniciar os pools. Por isso tive que mudar fs.suid_dumpable
para 1
conforme mencionado em
https://itnext.io/linux-processes-core-dumps-systemd-coredump-and-debian-cf2ddb11ef9e
sysctl -w fs.suid_dumpable=1