Apache环境mod_fcgid模式500错误“get unexpected signal 7”解决

08/14/2014

今天Kaijia在升级安装在一台Virtualmin服务器上的几个WordPress时碰到了不少神奇的500错误。500错误主要出现在WordPress的更新管理器界面载入5~10秒内,并且有一定概率性,大约打开5次更新管理器界面能碰到2次这种错误。这个问题Kaijia之前一直没有碰到,直到将服务器升级到Ubuntu 14.04并且重新安装Virtualmin后才有出现。

在检查了Virtualmin配置和服务器运行状态后Kaijia还是没有找到原因,服务器的空闲内存充足且访问量并不大,同时Virtualmin中设置的PHP执行时间也超过30秒。于是Kaijia检查了一下Virtualmin日志,找到了以下对应错误记录:

[Thu Aug 14 10:33:48.001044 2014] [fcgid:warn] [pid 21722] (104)Connection reset by peer: [client IP:Port] mod_fcgid: error reading data from FastCGI server, referer: https://server.kaijia.me/wp-admin/update-core.php?action=do-plugin-upgrade

[Thu Aug 14 10:33:48.001166 2014] [core:error] [pid 21722] [client IP:Port] End of script output before headers: update-core.php, referer: https://server.kaijia.me/wp-admin/update-core.php?action=do-plugin-upgrade

Apache的错误日志中则更加详细得记录了错误信息:

[Thu Aug 14 10:33:51.374409 2014] [fcgid:error] [pid 22000] mod_fcgid: process /home/user/fcgi-bin/php5.fcgi(21732) exit(communication error), get unexpected signal 7

错误的详细原因没有明确写明,只是说明了mod_fcgid模块的php-cgi进程出错了,退出信号是7。Google了一下这个问题出现的并不多,Kaijia找到了一个Stack Overflow,文中给出的方法是彻底卸载PHP-APC。但是Kaijia并没有安装PHP-APC,于是只能往下找,最后找到一个德文网页讨论了这个问题,其中用户Compositiv写道:

…In einzelnen Fällen bei APCu, ZendOpcache, ZendOptimizer etc. Dann kommt immer bei FastCGI error 500.

万能的Google翻译告诉我们这句话的意思是指与PHP-APC功能类似的Zend Opcache、Zend Optimizer等都有可能造成500错误。Ubuntu 14.04系统的PHP默认版本是5.5,PHP 5.5自带并且默认启动了Zend Opcache,因此有可能造成500错误。于是Kaijia禁用了Zend Opcache插件:

重启Apache服务之后就再也没有出现此类错误了。