1 故障现象:
在巡查系统时发现日志中报错如下:Too many open files
2 故障处理过程:
(1)查看nginx.conf配置文件知:
nginx的配置文件中的worker_connections 设置的太小(默认值1024)有关,并且还有5条反向代理,也占用文件句柄。
ulimit -n 160000 符合要求。
(2)在nginx.conf中修改worker_processes 2;为CPU核数
(3)worker_connections 4096;由1024改为2048都不行,并发量由1000左右,变为1500左右,后改为4096还是有少量报错。
(4)添加如下参数依旧,未解决。
multi_accept on;
use epoll;
(5)最后添加:worker_rlimit_nofile 65535;才解决问题,
worker_rlimit_nofile,上网查了一下,如果不配置与操作系统的ulimit -n的值一致,worker_connections 4096时,还是有少量一样的报错,谁帮忙解释一下加上worker_rlimit_nofile 65535;才解决问题?
worker_rlimit_nofile:理论值应该是最多打开文件数(ulimit -n)与nginx 进程数相除,但是nginx 分配请求并不是那么均匀,所以最好与ulimit -n 的值保持一致。
worker_connetions:每个工作进程允许最大的同时连接数(那么,这里是不是应该小于worker_rlimit_nofile)
(nginx最大的连接数:Maxclient = work_processes * worker_connections)