php-fpm线程僵死导致网站无响应

2018-03-29 14:11:54 7782

php-fpm线程僵死导致网站无响应


网站突然打不开,查看了网站日志,未发现有攻击和流量异常现象。查看内存,负载都未有异常,于是查看php-fpm日志,发现了大量以下样式的警告通知。

[NOTICE] fpm_children_bury(), line 215: child 11514 (pool baddb.com) exited with code 0 after 759.234956 seconds from start
[NOTICE] fpm_children_make(), line 352: child 11685 (pool baddb.com) started

查阅资料发现,这可能是因为打开的页面文件过多,而默认的线程已不够使用,因此导致php-fpm线程僵死。


由于php线程打开文件句柄会有受限的可能。因此需要查看以下几方面。


1:允许打开的句柄总量开关。


使用ulimit -n命令来查看数值。默认发现为1024,我们需要加大该值。

vi /etc/security/limits.conf

在对应处加上例如

* - nofile 8192

该值为系统允许的文件句柄打开数量总开关,因此该值的大小决定上限。


2:修改php-fpm.conf文件,若对应站点有单独的php-fpm.conf文件设置,则修改对应的站点.conf,例如php/php-fpm/baddb.com.conf,主要需要修改两个参数。


参数一:max_requests值,设置为8192,因为系统句柄决定了该值,因为设置值比8192更大,也仍然会被认为是8192


参数二:rlimit_files值,同样设置为8192


3:可以适当增加php-fpm线程数量,线程数量高,表示并发越强,同一时间能处理的请求越高,但前提是内存和CPU足够支撑这。因此,该值不要随意设置增大。越大线程,会占用更多的CPU资源。后果可能是造成主机死机。


最后重启主机,重启后再使用ulimit -n命令来查看,发现已经是8192


提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: