Nginx

1个成员

nginx提示:Too many open files解决办法

发表于 2017-02-12 4052 次查看
nginx提示:Too many open files这种错误问题的原因是因为linux文件系统最大可打开文件数为1024而你的nginx中的error.log出现大量的Too many open files,说明文件句柄不够用了所以就错误提示出来了。

如果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 hard nofile 10240
nobody soft nofile 10240
nobody hard nofile 10240

通常我们只需要为root用户和nginx运行用户nobody增加文件句柄数,如果你需要为每个用户都增加该值,则可以加入以下内容:

 代码如下 复制代码

* soft nofile 10240
* hard nofile 10240


注意:通过ulimit修改打开文件上限只会影响当前shell环境,所以这是一个临时解决方法,终极解决方法使用方法二。

方法二:在/etc/security/limits.conf文件中添加如下信息:

 代码如下 复制代码

* soft nofile 655360
* hard 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信息。如果仍然有大量该错误产生,则按照以上步骤继续加大文件句柄数。


注意:这个方法修改后必须重启机器才能使之生效。

发表回复
你还没有登录,请先登录注册