整理 exited on signal 11 (SIGSEGV) 解決方法

[06-Apr-2017 22:55:02] WARNING: [pool www] child 6785 exited on signal 11 (SIGSEGV) after 7896.992354 seconds from start

 

首先這個錯誤是某個php script崩潰

不是error也不是遇到什麼錯誤

而是執行過程整個process崩潰

查了一些資料

整理出有幾個原因

第一:

量太大,buffer不夠用

這很簡單,只需要調大buffer就好

修改php.ini和php-fpm.ini

把所有buffer和memory有關的設定都調大

第二:

php執行時間超過nginx等待時間

nginx fastcgi module

預設是60s

所以把

fastcgi_connect_timeout 300s;
fastcgi_send_timeout 300s;
fastcgi_read_timeout 300s;

這三項調大

或是參考其他參數

第三:

php本身bug導致進程崩潰

這有可能是裝了某個extesion

或是不穩定的php版本造成的

這時候就需要自己重新compile php

並打開debug

./configure xxxxxxx --enable-debug

然後打開產生coredump

# ulimit -c unlimited

並且可以自訂coredump產生的文件目的在哪

# vi /etc/sysctl.conf
kernel.core_uses_pid = 1 
fs.suid_dumpable = 2 
kernel.core_pattern = /tmp/core-%e-%s-%u-%g-%p-%t 

# sysctl -p

然後重啟php-fpm

這時候發生崩潰就會在/tmp底下產生coredump檔案

並用gdb來trace

詳情請見官方說明

 

看更多