上周在迁移网站到新服务器的时候,碰到了PHP-CGI经常跑着跑着占到100%CPU,然后进程全部卡死,网站没有响应。
在经过一天的观察下,在FPM下有错误日志
11月 13 21:19:21.219359 [NOTICE] fpm_got_signal(), line 48: received SIGCHLD
11月 13 21:19:21.219415 [NOTICE] fpm_children_bury(), line 194: child 7528 stopped for tracing
11月 13 21:19:21.219426 [NOTICE] fpm_php_trace(), line 139: about to trace 7528
11月 13 21:19:21.219579 [ERROR] fpm_trace_get_long(), line 78: ptrace(PEEKDATA) failed: 输入/输出错误 (5)
11月 13 21:19:21.220292 [NOTICE] fpm_php_trace(), line 167: finished trace of 7528
google了一下在nginx论坛上也有人问起这个问题,但是没有解决方法。
开始无从下手,换成Spawnfcgi管理php-cgi。结果跑了一个晚上,还以为解决的时候,当我早上登录服务器发现,诡异的事情又出现了,CPU急剧上升100%,负载上升到80-100多。
因为前面分析过,排除mysql的问题导致,因为和以前uchome1.5的beta版由于一个语句里缺少索引字段,导致的PHP-CGI挂掉的现象不一样。mysql死锁导致的异常不会cpu上升100%,只上升负载。问题就缩小到PHP相关上,由于FPM与spawnfcgi都出现问题,也不应该是CGI上的问题,那么只有PHP版本和ZendOptimizer或者eaccelerator之间的问题,想想最有可能的就是eaccelerator,网站上只有一个插件用到ZendOptimizer。 于是把eaccelerator降级下,想到当时为了追新,用了eaccelerator-0.9.6-rc1,而且这个版本改动较大,兼容了PHP6。
将版本换成eaccelerator-0.9.5.3,用spawnfcgi跑了一天多,没有出现问题。估计是瞎猫碰死老鼠撞对了。
环境为
CentOs 5.3 X86—64
nginx-0.8.20
ZendOptimizer-3.3.9-linux-glibc23-x86_64
php-5.2.11
eaccelerator-0.9.5.3






Dear Author http://www.bugx.org !
Quite right! I think, what is it good idea.
评论 由 golovlev
— 2009年12月4日 @ 14:18
我现在也出现fpm_trace_get_long(), line 78: ptrace(PEEKDATA) failed: 输入/输出错误 (5)
我看了你的文章之后,我把eaccelerator关掉了。
但是 问题依旧。。。显然这个问题不是eaccelerator 造成的 。。
评论 由 Christ
— 2010年03月30日 @ 12:41
我出现的问题确实是这样解决的,你的可能其他问题导致的
评论 由 bugx
— 2010年04月13日 @ 10:44
同上..我也是出现同样的问题
评论 由 稀饭
— 2010年06月2日 @ 01:10
一般还有一种情况就是某些PHP进程占用大,那么你需要看看你的MYSQL是否运行的正常,查询进程是不是卡住。还有PHP脚本超时的文件检查下
评论 由 bugx
— 2010年06月2日 @ 09:40