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