儘管配置為 php-fpm 不生成核心轉儲文件
我正在使用 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)
但不會。
我能夠通過以下方式解決此問題:
- 添加到 /etc/systemd/system.conf 文件:
DefaultLimitCORE=infinity
- 更改了 kernel.core_pattern:
sysctl kernel.core_pattern='| /usr/lib/systemd/systemd-coredump %p %u %g %s %t %c %e'
- 重新載入 systemd 配置:
systemctl daemon-reload
作為 php-fpm 的額外步驟,需要在您要監控的各個 php-fpm 池文件中設置以下指令:
rlimit_core = 無限制
systemd-coredump 程序的預設目錄是,
/var/lib/systemd/coredump
因此您應該會看到此處生成的轉儲文件。
我也遇到了麻煩。似乎在 centos 上,主
php-fpm
程序以 root 權限啟動,然後以降低的權限啟動各個池(php-fpm
預設情況下為 centos 上的使用者)。對我來說,我也懷疑你的絆腳石是,如果一個程序改變了它自己的執行權限,除非
/proc/sys/fs/suid_dumpable
設置為允許,否則不允許生成核心轉儲文件。在此處查看有關此核心級控制的資訊。