
我正在使用 php-fpm 5.4 運行 Centos 7。我在 php-fpm 錯誤日誌中遇到(訊號 11)SIGSEGV 錯誤,並且想要對其進行偵錯。
我聽從了建議php5 fpm:如何從段錯誤產生核心轉儲?但 php-fpm 仍然沒有嘗試產生核心轉儲。從 php-fpm 錯誤日誌:
WARNING: [pool website.com] child 26953 exited on signal 11 (SIGSEGV) after 0.931337 seconds from start
如果產生了核心轉儲,它會讀取(SEGSEGV - core dumped)
,但不會讀取。
答案1
我也遇到了這個問題。似乎在 centos 上,masterphp-fpm
進程是以 root 權限啟動的,然後以較低的權限啟動各個池(php-fpm
預設是 centos 上的使用者)。
對我來說,我懷疑對你來說,絆腳石是,如果一個進程改變了它自己的執行權限,則不允許生成核心轉儲文件,除非/proc/sys/fs/suid_dumpable
設置為允許這樣做。查看有關此內核級控制的信息這裡。
答案2
我能夠透過以下方法解決這個問題:
- 新增到 /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'
- 重新載入系統配置:
systemctl daemon-reload
作為 php-fpm 的額外步驟,需要在要監控的各個 php-fpm 池檔案中設定以下指令:
rlimit_core = 無限制
systemd-coredump 程式的預設目錄是,/var/lib/systemd/coredump
因此您應該看到此處產生的轉儲檔案。
答案3
啟動池之前的 PHP-FPM 切換器使用者。因此我必須更改fs.suid_dumpable
為1
如上所述
https://itnext.io/linux-processes-core-dumps-systemd-coredump-and-debian-cf2ddb11ef9e
sysctl -w fs.suid_dumpable=1