nginx出现”too many open files”的解决
原文地址:http://www.blogkid.net/archives/2531.html
中午我的Linode服务器又犯了老毛病,所有网站都不能访问。是因为服务器的nginx不停出错,输出的错误日志(error.log)塞满了整个分区。删除掉错误日志文件并重启nginx以后可以恢复正常。
我查看了一下错误日志的内容,发现全部是“Too many open files while accepting new connection on 0.0.0.0:80”。用Too many open files搜了一下,找到了一个解决方案。
先查了一下文件系统最大可打开文件数:
root@li55-4:~# cat /proc/sys/fs/file-max
70133
于是用ulimit修改了一下:
root@li55-4:~# ulimit -n 10240
这下把最大打开文件数从1024提高到了10240,应该够用了吧。
最后把”ulimit -n 10240″这一行增加到/etc/rc.local中,以保证每次系统启动都能生效。
这样做是否有效,还有待后续观察。
经过实测,在rc.local中加入这一行是没有效果的,使用ulimit -n 10240进行修改也仅能影响到当前的shell。对这个问题,老王做过的探索,请移步此处查看。修改后,需要重启一次方可生效。
感谢智勇发现问题。


把”ulimit -n 10240″这一行增加到/etc/rc.local中,以保证每次系统启动都能生效。
我的VPS重启就是不生效!
把 Keep-Alive的时间缩短一些吧,这样也可以不少的服务器资源,不失为一个解决办法。
@Cat
这个命令应该是只影响当前的bash。我也不知道这样是否能解决此问题,还需要再等一段看看。
你也遇到一样问题了?
嗯,是同样问题,我之前是解决了的,但后来忘记了…
要修改linux两个文件~
@Cat
是不是修改了一个叫做limits.conf的文件?
我之前是通过修改 commEnv.sh 的脚本弄好的。
ulimit的问题我以前研究过,可以参考:http://hi.baidu.com/thinkinginlamp/blog/item/e8605c6046cdbed78db10ddb.html
@老王
多谢,今天早上问题重现了,看来我这个办法没能起作用。
真的被你换成.net了
嗯,偶的看了一下 是50578 现阶段应该够用了
@showform
只操作了20分钟就ok了,google还提供了change of address的功能,可以方便实现整站域名的切换。百度似乎没有。
这个问题其实我最终也没能搞定,现在设置了一下每天午夜重启nginx,虽然山寨,但有奇效
ulimit -HSn 65536加到/etc/profile最后
source /etc/profile就可以了
@hao32
这样做只是解决当前会话吧。
每个会话都解决了, 因为任意一个会话开始都会去读profile
@hao32
有道理,重启一下确实如此
可以参考这个方法
http://www.linuxask.com/questions/increase-the-maximum-number-of-open-files-file-descriptors
@Chan
谢谢