在使用Nginx做转发时遇到了连接不上的情况,查看error日志发现一堆的Too many open files
报错
2020/06/10 12:47:49 [crit] 21453#21453: *77340 open() "/usr/share/nginx/html/50x.html" failed (24: Too many open files), client: 58.244.114.249, server: _, request: "POST /rest/user/version/ HTTP/1.1", upstream: "http://localhost:6088/rest/version/", host: "xxx.cn"
一、文件的限制
首先想到的是linux中的文件限制,因为nginx配置中用的是user nginx
,所以需要切换到nginx
账号下查看限制
1. 切换账号
su - nginx
如果出现This account is currently not available
错误,是nginx账号不允许登录,使用usermod -s /bin/bash nginx
设置一下就行了,详见This account is currently not available
2. 查看文件限制
ulimit -Hn # 硬
ulimit -Sn # 软
结果发现ulimit值都是65535,感觉问题不在这。
如果ulimit值不够大时,可以用修改/etc/security/limits.conf
配置文件,修改或添加
# 配置nginx用户文件限制
nginx soft nofile 65535
nginx hard nofile 65535
# 配置所有用户文件限制
* soft nofile 65535
* hard nofile 65535
这里需要重启nginx才会生效
二、Nginx配置限制
排除了系统的文件限制,可能就是Nginx自身配置导致的了。
# vim /etc/nginx/nginx.conf 这里为nginx配置文件
worker_rlimit_nofile 65535; //添加
events {
worker_connections 20480; //修改
}
重启nginx或reload重新加载配置就可以了。
参与文章:https://www.cyberciti.biz/faq/linux-unix-nginx-too-many-open-files/
网友评论