增加所有进程的打开文件限制:我需要设置软/硬限制吗?

增加所有进程的打开文件限制:我需要设置软/硬限制吗?

我正在尝试修复运行游戏服务器一两天后出现的以下错误。

2017/12/13 12:08:35 http: Accept error: accept tcp [::]:8081: accept4: too many open files; retrying in 1s

我将“fs.file-max = 2000000”添加到/etc/sysctl.conf并执行

sysctl -w fs.file-max=2000000
sysctl -p

我的全局限制现已更新(我需要重新启动吗?),但软限制和硬限制仍然分别为 1024 和 4096。

另外,使用以下命令检查 root 用户的“打开文件”时:

su - root -c 'ulimit -aHS' -s '/bin/bash'

我也得到了1024。

软限制和硬限制有什么作用?我是否需要更改它们才能使全局限制生效?那么用户(root)限制又如何呢?

谢谢!

答案1

您设置的限制sysctl是适用于整个系统的系统设置。它不是适用于单个进程的限制。

每个进程最多可以打开 N 个文件,其中 N 是进程的NOFILE软限制,并且可以将自己的软限制更改为不超过硬限制。只有以 root 身份运行的进程才能提高其硬限制。进程会继承其父进程的限制。

更改单个服务的限制的方法(这是您应该做的)取决于您的 init 系统。

  • 对于 SysVinit (CentOS ≤6):编辑服务的 init 脚本(通常位于/etc/rc.d/init.d)以在运行守护程序之前调用ulimit,然后重新启动服务。
  • 对于 Systemd (CentOS ≥7):编辑服务的单元文件 /etc/systemd/system/my_game_server.service并添加一个指令

    LimitNOFILE=16384
    

    然后运行systemctl daemon-reload以重新加载配置,然后重新启动服务。

答案2

您可以更改 中的限制/etc/security/limits.conf。注销并重新登录即可生效。

Hardlimit:某个用户的边界 - 该用户在运行时不能增加,只能减少:ulimit -Hu 2000。硬限制列表:ulimit -Ha

软限制:硬限制内的“软”边界,用户可以在运行时更改:ulimit -Su 10000软限制列表:ulimit -Sa

更改正在运行的进程的 ulimits:prlimit -p $$ --nproc=1200:。这会将当前 shell 的进程数 (softlimit) 更改为 1200 $$

答案3

您可以更改文件中的限制数量/etc/security/limits.conf(对于特定用户或每个人)您应该像这样添加:

username               soft    nofile          4096
username               hard    nofile          5120

这会将打开文件的数量设置为 4096(软限制),将 5120 设置为最高

进行此编辑后,您需要重新登录并重新启动服务才能对此负责。

据我记得,ulimit只有在您从该用户注销之前才会进行更改

相关内容