我应该设置多少值来解决 Nginx 上的“打开文件过多”错误?

我应该设置多少值来解决 Nginx 上的“打开文件过多”错误?

我在 Nginx 服务器(v 1.21.6)上运行 wordpress 网站。

最近我看到了如下错误。

2022/03/07 19:43:41 [crit] 563445#563445: accept4() failed (24: Too many open files)
2022/03/07 19:43:42 [crit] 563445#563445: accept4() failed (24: Too many open files)

我重新启动Nginx,网站访问正常。

然后,我用 Google 搜索来解决这个问题,出现了很多让我困惑的教程和值。

我的系统信息

ulimit -Hn
1048576
ulimit -Sn
1024

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 7581
max locked memory       (kbytes, -l) 65536
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 7581
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

然后我将以下值添加到 /etc/sysctl.conf。

fs.file-max = 70000

这解决了我所有的问题吗?

如果不是这种情况,我很想听听一些关于是否应该添加其他设置的建议。

谢谢。

答案1

我将以下值添加到 /etc/sysctl.conf。

fs.file-max = 70000

sysctl命令用于修改内核参数在运行时。它可以将单个参数作为参数,即sysctl fs.file-max读取参数的当前值或sysctl fs.file-max=98036设置该值,或者sysctl -p /path/to/file从文件中读取参数。

文件/etc/sysctl.conf(以及一些其他文件)是内核参数的默认预加载/配置文件。

仅仅更改该文件不会产生任何影响。

您需要重新启动或者运行[sudo] sysctl --system以应用更改的设置。


ulimit命令获取/设置资源限制内核针对特定用户或进程强制执行。


尽管你可以设置资源ulimit限制“无限”或者看似更现实,但仍然具有超过相关内核参数的值,这样做不会使这种情况发生。

系统资源是有限的,当有这样的内核参数时,那就是可用的上限。

相关内容