nginx 报错 accept4 () failed (24:Too many open files)

用户头像
Java联盟
关注
发布于: 2020 年 08 月 19 日
nginx 报错 accept4 () failed (24:Too many open files)

在《nginx 报错 worker_connections are not enough》文章中我们解决了worker_connections are not enough的问题,但随着用户的增长,nginx的并发连接越来越多,nginx经常出现如下错误:

2020/08/18 16:44:39 [crit] 23063#23063: accept4() failed (24: Too many open files)
2020/08/18 16:44:39 [crit] 23063#23063: accept4() failed (24: Too many open files)
2020/08/18 16:44:39 [crit] 23063#23063: accept4() failed (24: Too many open files)
2020/08/18 16:44:39 [crit] 23063#23063: accept4() failed (24: Too many open files)
2020/08/18 16:44:39 [crit] 23063#23063: accept4() failed (24: Too many open files)
2020/08/18 16:44:39 [crit] 23063#23063: accept4() failed (24: Too many open files)
2020/08/18 16:44:39 [crit] 23063#23063: accept4() failed (24: Too many open files)
2020/08/18 16:44:39 [crit] 23063#23063: accept4() failed (24: Too many open files)
2020/08/18 16:44:39 [crit] 23063#23063: accept4() failed (24: Too many open files)
2020/08/18 16:44:39 [crit] 23063#23063: accept4() failed (24: Too many open files)

错误显示nginx打开了了太多的文件,在linux系统时连接也属于文件的一种。



首先我们查看服务器最大允许打开的文件数量:

#cat /proc/sys/fs/file-max
#sysctl -n -e fs.file-max
782719

可以看到系统最多支持打开的文件数量上限为:782719



查看当前服务器设置的最多可打开的文件数量:

#ulimit -Hn
65535
#ulimit -Sn
65535

只有65535,有点小,在/etc/security/limits.conf文件调整:

* soft nofile 500000
* hard nofile 500000

*表示针对所有的用户,修改数量为500000,这个数字可以按你的需要来调整,不过不能大于系统支持的上限。



最后修改nginx的配置,调整worker_rlimit_nofile设置的数值:

worker_processes 4;
worker_rlimit_nofile 409600;
events {
worker_connections 25000;
...
}

worker_rlimit_nofile:表示nginx最多可以打开的文件数量,在linux中所有的资源都是文件,连接也属于一种文件,这里设置为409600,可以按照自己的实际设置,不能大于上面设置的服务器最多可以打开的文件数量即可。



发布于: 2020 年 08 月 19 日 阅读数: 40
用户头像

Java联盟

关注

海纳百川,有容乃大。 2019.04.18 加入

~

评论

发布
暂无评论
nginx 报错 accept4 () failed (24:Too many open files)