现象是,只要用PHP cli模式跑脚本,网站立马就502。
从网站建设到定制行业解决方案,为提供成都做网站、成都网站设计服务体系,各种行业企业客户提供网站建设解决方案,助力业务快速发展。创新互联公司将不断加快创新步伐,提供优质的建站服务。查看错误日志,看到的是“child 31457 exited on signal 7 (SIGBUS) after 0.384581 seconds from start”
打开ulimit,查看core dump,发现是xcache导致。
网上查了一下,有说xcache是不支持cli模式的,但是在官方wiki里似乎没有看到说明的样子?
ps 对应的php版本是5.4.45,安装的xcache 版本是 3.2.0,没有深入尝试,不知道其他版本有没有这个问题。
对照core dump查看源代码,过程如下:
1 在mod_cacher/xc_cacher.c 495行,执行这一句 if (!cache->cached->disabled && XG(request_time) >= cache->cached->last_gc_expires + (time_t) gc_interval) 时出错,抛出异常。
2 捕获到异常,调用xcache.c 中的 xcache_signal_handler 进行处理,发现设置了“崩溃则禁用”的选项,调用mod_cacher/xc_cacher.c中的xc_cacher_disable来处理进行禁用。
有如下代码段
if (xc_var_caches) {
for (i = 0; i < xc_var_hcache.size; i ++) {
if (xc_var_caches[i].cached) {
xc_var_caches[i].cached->disabled = now;
}
}
}
注意到循环时使用的是xc_var_hcache.size,而并不是xc_var_caches的实际大小,这样是有风险的,除非能确保两者一致。最终,错误发生在xc_var_caches[i].cached->disabled = now;这一句,具体的原因,现在还没有去找,等有时间调试打印一下,,再更新文章,可以的话提交个BUG给xcache。
果断换ZendOptimizerPlus,没有出现问题了。
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
本文名称:记录一下xcache导致的php-fpm502问题-创新互联
链接分享:http://scpingwu.com/article/dpchgo.html