解决|解决 Nginx 500 Interval Server Error

背景 最近在使用 Nginx 的过程中,访问网站的时候时常出现 500 Interval Server Error?。查看日志,发现错误原因是 Too many open files。
问题分析 在网上根据 500 Interval Server Error 解决方案,没有明确的解决方案。又根据 Too many open files 咨询阿兰,答复说应该是打开的 Linux 的文件句柄数达到上限了,因为 Nginx 把网络连接都映射成了文件。那解决问题的关键就在于修改 Linux 的文件打开数上限了。
解决方案 无效的解决方案 通过搜索,可以根据以下指令来查看系统文件限制。

ulimit -Hn ulimit -Sn

临时可以使用以下命令提高上限。
ulimit -n 655350

但据说这种方式退出 Shell 以后会失效,因为当前还暂时涉及不到重启的问题,需要的时候再继续探讨解决。我原本以后退出 Shell 的意思是重启,原来就是退出控制台或者说是本次会话,所以这么修改实在没什么意义。而且最重要的是这种解决方案不好使。
有效的解决方案 看了歪果仁这篇文章以后才知道到底怎么解决。
看了很多解决这个问题的文章,都是把打开文件数提到 10000 或者 30000。我的服务器的打开上限已经是 65535 了,比他们调整后的都高。因此可能问题不是出现在这里。
根据这篇文章,我重点查了一下 Nginx 这个进程所允许的打开文件数量。
cat /proc/【解决|解决 Nginx 500 Interval Server Error】/limits

发现文件打开限制只有 1024,可能是这个地方是瓶颈。于是又在 Nginx 的配置文件中,单独加上了一行,用以设置该进程单独的上限。
worker_rlimit_nofile 10240;

目前为止,问题没有再出现。

    推荐阅读