Nginx: Too Many Open Files 错误和解决方案
Nginx 的服务器使用越来越普遍,主要因为他的性能大大优于Apache2。但在使用过程中往往遇到一些问题,下面这个就是其中之一:
24: Too many open files |
详细错误代码如下:
2011/05/01 23:00:49 [alert] 7387#0: *6259768 socket() failed (24: Too many open files) while connecting to upstream |
次错误容易让人摸不着头绪,不知道是哪里出了问题,配置检查过没问题。程序代码的错误也不应该是这个错误信息啊。
其原因是Linux / Unix 设置了软硬文件句柄和打开文件的数目,解决方法如下:
简单修改方法:
使用如下命令可以把打开文件数设置足够大
ulimit -n 30000 |
同时修改nginx.conf添加
worker_rlimit_nofile 30000; |
这样就可以解决Nginx连接过多的问题,Nginx就可以支持高并发。
注意: 用ulimit -n 30000 修改只对当前的shell有效,退出后失效。
感觉还是通过下面的房改修改比较稳定
一、通过修改硬件配置来实现更改
你可以使用’ulimit’命令来查看系统文件限制。
ulimit -Hn ulimit -Sn |
在nginx服务器可以打开的文件数量受你操作系统的限制,编辑/etc/sysctl.conf 添加如下内容:
fs.file-max = 70000 |
保存退出,从新读取系统配置
sysctl -p |
再编辑 /etc/security/limits.conf 添加内容:
* soft nofile 10000 * hard nofile 30000 |
此修改内容需要reboot系统才能生效,所以务必从新启动下服务器。
二、修改Nginx系统的文件限制,使用nginx worker_rlimit_nofile Option
打开你相应的配置文件位置,我用的ubutnu12.04 所以路径如下
vim /etc/nginx/nginx.conf |
添加内容
# set open fd limit to 30000 worker_rlimit_nofile 30000; |
保存退出从新读取nginx配置
sudo service nginx reload |
再次查看系统输出
ulimit -Hn ulimit -Sn |
结果如下:
30000 10000 |