最近看nginx error_log 中出现worker_connections are not enough(错误),整理一下解决过程
1 worker_connections
这个问题与下面两个重要的参数有关:
句法: worker_connections number;
默认: worker_connections 512;
语境: events
设置工作进程可以打开的最大并发连接数。
应该记住,这个数字包括所有连接(例如与代理服务器的连接等,有反向代理链接数就会有相应增加),而不仅仅是与客户端的连接。另一个考虑因素是,同时连接的实际数量不能超过打开文件的最大数量的当前限制,可以通过worker_rlimit_nofile更改。
句法: worker_rlimit_nofile number;
默认: -
语境: main
更改RLIMIT_NOFILE工作进程的最大打开文件数量限制()。用于在不重新启动主进程的情况下增加限制。
这个错误的原因即为:worker_connections 大于打开文件的最大数量的当前限制
配置为该种方式即可解决问题:
worker_rlimit_nofile 65535;
events {
worker_connections 10240;
}
当然也可以通过直接修改linux 系统配置来更改最大打开文件数
2 修改linux文件句柄限制
在Linux下面部署应用的时候,有时候会遇上Socket/File: Can’t open so many files的问题,因为Linux有文件句柄限制的,默认仅仅为1024,所以我们需要对它进行一定的修改,才能支持nginx的连接数。
我们可以使用ulimit -a命令查看Linux相关限制
可以看到open files (-n) 1024
即linux 默认最大打开文件数为1024
对于临时测试我们可以使用ulimit -n Number 修改最大文件句柄限制,但该种修改方式仅仅对当前session有效。
永久生效方案
vi /etc/security/limits.conf
在limits.conf中添加以下参数
- soft nofile 40960
- hard nofile 65536
参数:
- 代表所有用户有效
soft:软限制,超过会报warn
hard:实际限制
nofile:文件句柄参数
number:最大文件句柄数
修改完成保存后,退出ssh再次登录,使用ulimit -n 就可以看到open files 参数已经改变成功了。
参考链接
https://www.cnblogs.com/ibook360/archive/2012/05/11/2495405.html
————————————————
原文
https://blog.csdn.net/m0_37263637/article/details/80813881