如果nginx的error.log出现大量的Too many open files,说明文件句柄不够用了,这时候我们需要加大系统的文件句柄数和nginx的允许最大的连接数。
默认情况下linux文件系统最大可打开文件数为1024,对于一个应用于生产环境下的服务器来说,这个设置太下,例如在用nginx做web服务器,当并发达到一定数量时,可以看到error.log里出现大量的“Nginx accept() failed (24: Too many open files)” 错误。解决这个问题的办法有两种:
方法一:使用ulimit -n 655350 把打开文件上限设置为655350,同时还需要修改nginx的配置文件,把worker_rlimit_nofile 值设置为一样。
1、更改系统文件句柄
代码如下 | 复制代码 |
vi /etc/security/limits.conf |
增加以下内容:
代码如下 | 复制代码 |
root soft nofile 10240 |
通常我们只需要为root用户和nginx运行用户nobody增加文件句柄数,如果你需要为每个用户都增加该值,则可以加入以下内容:
代码如下 | 复制代码 |
* soft nofile 10240 |
注意:通过ulimit修改打开文件上限只会影响当前shell环境,所以这是一个临时解决方法,终极解决方法使用方法二。
方法二:在/etc/security/limits.conf文件中添加如下信息:
代码如下 | 复制代码 |
* soft nofile 655360 |
2、更改nginx.conf参数
代码如下 | 复制代码 |
vi /etc/nginx/nginx.conf |
找到worker_rlimit_nofile和worker_connections参数,将值改为:
代码如下 | 复制代码 |
worker_rlimit_nofile 10240; worker_connections 10240; |
3、重新启动nginx
nginx -s reload
这样新的允许最大连接数就生效了。
4、检查error.log,看看是否还有Too many open files信息。如果仍然有大量该错误产生,则按照以上步骤继续加大文件句柄数。
注意:这个方法修改后必须重启机器才能使之生效。