我正在使用 php-fpm 5.4 运行 Centos 7。我在我的 php-fpm 错误日志中遇到(信号 11)SIGSEGV 错误并想对其进行调试。
我遵循了php5 fpm 的建议:你如何从 segfault 生成核心转储?但 php-fpm 甚至还没有尝试生成核心转储。从 php-fpm 错误日志:
WARNING: [pool website.com] child 26953 exited on signal 11 (SIGSEGV) after 0.931337 seconds from start
如果生成了核心转储,它会读取(SEGSEGV - core dumped)
但不会。
我也遇到了麻烦。似乎在 centos 上,主
php-fpm
进程以 root 权限启动,然后以降低的权限启动各个池(php-fpm
默认情况下为 centos 上的用户)。对我来说,我也怀疑你的绊脚石是,如果一个进程改变了它自己的执行权限,除非
/proc/sys/fs/suid_dumpable
设置为允许,否则不允许生成核心转储文件。在此处查看有关此内核级控制的信息。我能够通过以下方式解决此问题:
DefaultLimitCORE=infinity
sysctl kernel.core_pattern='| /usr/lib/systemd/systemd-coredump %p %u %g %s %t %c %e'
systemctl daemon-reload
作为 php-fpm 的额外步骤,需要在您要监控的各个 php-fpm 池文件中设置以下指令:
rlimit_core = 无限制
systemd-coredump 程序的默认目录是,
/var/lib/systemd/coredump
因此您应该会看到此处生成的转储文件。启动池之前的 PHP-FPM 切换器用户。因此,我不得不更改
fs.suid_dumpable
为1
https://itnext.io/linux-processes-core-dumps-systemd-coredump-and-debian-cf2ddb11ef9e