我们使用 CentOS/nginx fastcgi_cache 来缓存服务器上对 PHP 文件的请求。此文件访问非常频繁,更新也非常频繁,因此它有 1s 缓存。
通常当我们查看访问日志时我们会看到如下内容:
00:01 REQUEST 1 "EXPIRE"
00:01 REQUEST 2 "HIT"
00:01 REQUEST 3 "HIT"
00:02 REQUEST 4 "EXPIRE"
00:02 REQUEST 5 "HIT"
00:02 REQUEST 6 "HIT"
当问题发生时,nginx 会发生一些事情,突然日志开始看起来像这样(即使在同一秒,所有日志都会过期):
00:01 REQUEST 1 "EXPIRE"
00:01 REQUEST 2 "EXPIRE"
00:01 REQUEST 3 "EXPIRE"
00:02 REQUEST 4 "EXPIRE"
00:02 REQUEST 5 "EXPIRE"
00:02 REQUEST 6 "EXPIRE"
重要提示:就在发生这种情况之前,php-fpm 报告:警告:[pool www] 服务器已达到 max_children 设置 (35),请考虑提高它注意:正在终止...注意:正在退出,再见!注意:fpm 正在运行,pid 27544注意:已准备好处理连接
(这不是正常行为,而且非常罕见)
我尝试在工作中途重新启动 php-fpm,看看它是否会影响缓存 - 不行。我还尝试对经常调用的特定文件进行压力测试,但我不能让系统发疯。还验证了缓存键是否配置正确。
有人知道这里还存在什么其他可能性吗?我还能研究什么吗?
PS:当这种情况发生时,为了修复它,我们停止对文件的请求并重新启动服务,它就可以再次工作了。
谢谢你的帮助,Alon