nginx worker_connections are not enough(错误)

最近看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

你可能感兴趣的:(工具)