Nginx:24:打开文件太多错误和解决方案

时间:2020-01-09 10:42:18  来源:igfitidea点击:

我在Nginx服务器错误日志文件中收到以下错误:

2010/04/16 13:24:16 [crit] 21974#0: *3188937 open() “/usr/local/nginx/html/50x.html” failed (24: Too many open files), client: 88.x.y.z, server: example.com, request: “GET /file/images/background.jpg HTTP/1.1”, upstream: “http://10.8.4.227:81//file/images/background.jpg”, host: “example.com”

如何在CentOS/RHEL/Fedora Linux或者UNIX之类的操作系统下解决此问题?

Linux/UNIX对文件句柄和打开文件的数量设置了软限制和硬限制。
您可以使用ulimit命令查看这些限制:

su - nginx

要查看硬值和软值,请发出以下命令:

ulimit -Hn
ulimit -Sn

在Linux OS级别上增加开放FD限制

您的操作系统对nginx服务器可以打开多少文件设置了限制。
您可以通过在Linux下设置或者增加系统打开文件的限制来轻松解决此问题。
编辑文件/etc/sysctl.conf,执行:

# vi /etc/sysctl.conf

追加/修改以下行:

fs.file-max = 70000

保存并关闭文件。
编辑/etc/security/limits.conf,执行:

# vi /etc/security/limits.conf

为所有用户或者nginx用户设置软限制和硬限制,如下所示:

nginx       soft    nofile   10000
nginx       hard    nofile  30000

保存并关闭文件。
最后,使用sysctl命令重新加载更改:

# sysctl -p

nginx worker_rlimit_nofile选项(在Nginx级别上增加开放FD限制)

Nginx还带有worker_rlimit_nofile指令,如果该指令在进程级别上不够运行,则可以扩大此限制。
设置nginx进程可以打开的最大文件描述符的值。
编辑nginx.conf文件,执行:

# vi /usr/local/nginx/conf/nginx.conf

追加/编辑如下:

# set open fd limit to 30000
worker_rlimit_nofile 30000;

保存并关闭文件。
重新加载Nginx Web服务器,执行:

# /usr/local/nginx/sbin/nginx -t && /usr/local/nginx/sbin/nginx -s reload
# su - nginx
$ ulimit -Hn
$ ulimit -Sn

输出示例:

30000
10000