本地更新代码需要上传文件时,一直的步骤是:重命名文件后如addcn.user.php上传到远程服服务器,登录服务器在shell下mv addcn.user.php user.php,这样就可快速地修改文件而不中断会员正在进行的操作。php4代码升级后运行环境改为nginx0.8.36+php5.3.3,发现新上传或者mv修改文件后偶尔服务器负载急剧上升,uptime查看负载100多而致网站几乎崩溃,而且平时网站运行无任何人工操作也出现(几率较少但的确出现)过,重启php后,负载就会下降至正常。
查看php-fmp.log发现以下可疑的地方:
Oct 16 22:13:00.865052 [ERROR ] [pool www] unable to retrieve process activity of one or more child(ren). Will try again later.
...
Oct 16 22:45:10.864538 [WARNING] [pool www] child 21034 said into stderr: "] [notice] EACCELERATOR(21034) : PHP crashed on opline 3 of saveDenyIpTxt() at /home/htdocs/***/apps/***/include/public/ip.public.php:50"
Oct 16 22:45:10.864551 [WARNING] [pool www] child 21034 said into stderr: ""
Oct 16 22:45:10.866970 [WARNING] [pool www] child 21034 exited on signal 7 SIGBUS after 1994.011051 seconds from start
Oct 16 22:45:10.869048 [NOTICE] [pool www] child 22020 started
ip.public.php、session.tool.php文件在网站入口判断被禁止的ip列表,然后更新写入denyIp.inc.php配置文件,猜测跟人工修改文件一样——写文件操作而致负载暴升。
处理方法:
1、减少修改文件,ip.public.php、session.tool.php不更新denyIp.inc.php文件,使用crontab每隔一段时间更新被禁止ip数据。
2、eaccelerator不缓存denyIp.inc.php,在php.ini文件添加(eaccelerator控制面板查看还是有缓存这文件,设置不正确?):
eaccelerator.filter="!/home/htdocs/***/apps/***/include/config/denyIp.inc.php"
处理后观察一段时间,无人操作负载暴升现象暂时没有出现(因为发生的偶尔性,不确定后面也不出现,前面猜测的“修改文件而致负载暴升”说法正确,因为上面处理就是减少修改文件),mv文件时比以前少,但发生过一次,而且观察nginx及php-fmp日志,前面提到的ERROR及EACCELERATOR警告还存在,继续观察和寻找解决方法。
2011-1-21更新:
最新版php5.3.5已经释出,php5.3.3升级至php5.3.5后,ERROR日志不存在,EACCELERATOR警告依旧,(日志比以前少,9天出现10次,报错文件行数多为includehtml或inc文件),负载暴升问题升级后暂无再出现过。