有用户使用《lnmp一键安装包》 在CentOS6.6 64bit上安装php(php5.4、Opcache、ZendGuardLoader)、hhvm,用vhost.sh添加虚拟主机选择php,使用 某主题(主题加密,需要使用ZendGuardLoader),启用改主题直接报502错误。束手无策,于是找我来排错,如下: 通过查看php日志/usr/local/php/var/log/php-fpm.log,有如下警告信息: [16-Mar-2015 16:03:09] WARNING: [pool www] child 9453 exited on signal 11 (SIGSEGV) after 9.601040 seconds from start 日志中的信息表明,进程号为9453的进程由于收到SIGSEGV信号而退出了。收到这个信号的时候,程序是可以生成core文件的。不过通过日志 我们可以知道进程9453退出时没有生成core文件。因为在php-fpm的日志中,如果退出时生成了core文件,日志中会有“SIGSEGV – core dumped”字样。如: [16-Mar-2015 16:04:29] WARNING: [pool www] child 9581 exited on signal 11 (SIGSEGV - core dumped) after 15.921916 seconds from start
如何生成core文件 [root@linuxeye ~]# ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 5762 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 65535 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 10240 cpu time (seconds, -t) unlimited max user processes (-u) 65535 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited 可以通过如下命令解除限制: [root@linuxeye ~]# ulimit -c unlimited [root@linuxeye ~]# ulimit -a core file size (blocks, -c) unlimited data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 5762 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 65535 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 10240 cpu time (seconds, -t) unlimited max user processes (-u) 65535 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited
注意,ulimit -c 的设置仅仅是对你完成设置后启动的进程有效。而且退出登陆后,再进入需要从新设置。否则从新登陆后启动的进程也无法生成core文件。
如何找到core文件 # vi /etc/sysctl.conf kernel.core_uses_pid = 1 #追加进程号到core文件名中 fs.suid_dumpable = 2 #确保设置属主的进程也可以生成core文件 kernel.core_pattern = /tmp/core-%e-%s-%u-%g-%p-%t #指定core文件生成的位置和文件名规则。文件名规则可以使用的参数有: %% – 符号% %p – 进程号 %u – 进程用户id %g – 进程用户组id %s – 生成core文件时收到的信号 %t – 生成core文件的 时间 (seconds since 0:00h, 1 Jan 1970) %h – 主机名 %e – 程序文件名 执行如下命令,让设置生效
# sysctl -p
重启php-fpm service php-fpm restart
重现502错误
如何使用core文件 gdb -e /usr/local/php/sbin/php-fpm -c /tmp/core-php-fpm-11-501-501-9581-1426493066 根据上面的堆栈信息,可以知道Optimizer(即Opcache)有问题,编辑/usr/local/php/etc/php.ini,注销掉Opcache段,重启php-fpm ,正常。。。 转自:http://blog.linuxeye.com/414.html转载请保留固定链接: https://linuxeye.com/Linux/2295.html |