最近遇到了一个比较棘手的问题,服务器莫名其妙就挂了。查看nginx日志,报HTTP 499错误码,说明PHP对nginx未响应了。查看php进程,发现进程存在,查看代码报错日志,并未发现报错。重启php后服务器恢复。但是恢复20分钟后还是挂了。
再次查看php slowlog发现端倪,有慢日志,从慢日志定位到代码,报错指向的代码是
apcu_store()
初步判断是apcu的问题。
查看apc配置,
php -i | grep apc
发现apcu配置的内存只有32M,
修改配置,将apcu内存扩大到4G,问题解决,再未发生过挂的情况。
vim /etc/php/7.0/fpm/conf.d/20-apcu.ini
extension=apcu.so
apc.enabled=1
apc.shm_size=4096M
apc.enable_cli=1
到apcu官网查看相关问题,发现是apcu自己bug,
https://github.com/krakjoe/apcu/issues/333
大概是apcu_store中存在lock死锁的问题。
希望给遇到相关问题的朋友一点帮助。