云服务器知识

服务器:php-fpm线程卡死导致网站无响应

  

服务器: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