Nginx 「Too many open files」问题排查
这两天业务部门反馈流量下降的很厉害,我看了一下Nginx的日志,提示「768 worker_connections are not enough」,很明显768对于百万级的PV来说少了太多,打开nginx.conf将其中的连接数量从768更改到了65535。
隔了一小会,发现日志中这个错误已经消失,另外一个错误「Too many open files」又出现了。从字面来看,是服务器的句柄数量不足导致。查看一下nginx的配置
user root root;
# 1.
worker_processes auto;
# 2.
worker_rlimit_nofile 65535;
...
events {
use epoll;
# 3.
worker_connections 65535;
}
...
- 将
worker_processes
从自动获取变成了实际的服务器CPU核心数量 - 调整Nginx worker进程的最大打开文件数为65535
- 这个参数是用来控制Nginx单个进程所允许的客户端最大连接数。上面从768调整到了65535。在设置这个连接数量的时候,注意一点,进程的最大连接数受制于Linux系统进程的最大打开文件数限制。
那么系统的最大连接数是多少呢?ulimit -a
可以查看
> ulimit -a
...
open files (-n) 65536
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
...
如果open files 数量不够,通过ulimit -n xxx
设置最大连接数。修改完Nginx配置后,nginx -s reload
重启Nginx即可。