码迷,mamicode.com
首页 > 其他好文 > 详细

Nginx服务器报 "Too Many Open Files"

时间:2017-02-03 15:34:43      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:limit   请求   targe   需要   内容   负载   str   文件打开   files   

近日服务器上的运行的一个站点经常性出现500错误。查了下服务器负载,负载正常。而后查询了下nginx记录的站点运行错误日志,发现提示Too many open files。因为站点静态文件居多,而且http请求结束后,打开的文件描述符会被自动关闭,所以程序中应当不存在没有关闭文件描述符的情况。猜测就是系统方面的问题了。

我们知道系统每打开一个文件,都会占用一个文件描述符,而系统打开文件描述符是有上限的。在centos下默认值一般为1024,可以通过命令查看:

$ ulimit -n

那么如何修改这个值呢?

1、首先先确定下系统内核允许文件打开数量的上限。(内核级别的)

$ sysctl -n -e fs.file-max

在centos 6.4上默认值为98542,这个数量相对1024来讲,已经远远超过,所以暂时没必要进行调整。

如果需要调整,可以编辑/etc/sysctl.conf这个文件。

$ vi /etc/sysctl.conf

加上fs.file-max设置

fs.file-max = 100000

然后重新载入核心配置

$ sysctl -p

有关系统核心配置可以查看相应的man手册:man sysctl,man sysctl.conf。

2、修改/etc/security/limits.conf文件,设置打开的文件数量上限。(系统级别的)

* soft nofile 10240
* hard nofile 15360

其中第一行soft表示所有用户打开文件的数量限制为10240,如果超过这个数字则提示警告信息,但是依然可以打开文件。
第二行hard表示最大的打开文件数量不能超过15360,如果超过这个数字,则无法打开文件。

这里也可以针对具体的用户或者用户组进行相应的设定。例如针对nginx这个用户进行设定:

nginx soft nofile 10240
nginx hard nofile 15360

更多详细的内容可以参考PAM的相关知识。

修改完这里之后,重新登录下机器查看ulimit -n,就会发现设置生效了。改完这些之后,还需要修改下nginx打开的文件数量上限。

3、修改nginx配置文件,设置打开文件数量上限。(程序级别的)

在配置文件中增加如下设置:

worker_rlimit_nofile 15360

该参数表示每个工作进程可以打开的文件数量。作用域和worker_processes一样。因为系统设定最大为15360,由于每个工作进程分配不是均匀的,所以这里设置为15360。

修改了nginx文件,需要reload一下。

至此,nginx中Too many open files的问题就算处理了,上面打开的文件数量数值设置可以根据服务器的情况进行调整,有问题可以和我联系。

转载:http://www.01happy.com/nginx-too-many-open-files/

Nginx服务器报 "Too Many Open Files"

标签:limit   请求   targe   需要   内容   负载   str   文件打开   files   

原文地址:http://www.cnblogs.com/lin1/p/6362613.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!