增加 ulimit 打开文件数不适用于 RHEL 8.1

增加 ulimit 打开文件数不适用于 RHEL 8.1

我有一个完全更新的 Red Hat Enterprise Linux (RHEL) 8.1 x86_64 系统,作为本地终端中的本地用户(即不是通过 SSH 远程),当我运行ulimit -Sn它时会显示1024ulimit -Hn产生4096我希望增加这些数字因为当我编译大型项目时gcc,该make步骤经常会出错too many open files。我甚至尝试将编译移到podman容器中,但这没有帮助,因为容器只是继承了我本地用户的ulimits。

这是我在主机上尝试过的操作:

  1. /etc/security/limits.conf已经添加了:
*          soft nofile 32767
*          hard nofile 65535
[username] soft nofile 32767
[username] hard nofile 65535
  1. 我检查了一下ls -a /etc/security/limits.d/,那里没有文件。
  2. 其中/etc/sysctl.conf有一行写着fs.file-max = 65535。我也跑了sysctl -p
  3. 我将其添加session required pam_limits.so到文件末尾/etc/pam.d/login
  4. ls -a /etc/sysctl.d/显示两个文件./ ../ 50-libreswan.conf 99-sysctl.conf@,均不包含与打开文件数量相关的任何内容。
  5. cat /proc/sys/fs/file-max65535
  6. /etc/systemd/user.conf是空的(所有行都被注释掉了),并且我试图明确设置DefaultLimitNOFILE=65535

尝试上述操作后,当我运行cat /proc/self/limits或时prlimit,相关输出行仍然显示:

NOFILE     max number of open files                1024      4096 files

我现在唯一的线索是,当我使用 Gnome 的系统活动应用程序查看我的进程时,当我打开一个终端窗口时, bash进程,均在我的本地用户下。奇怪的是,当我cat /proc/[process id]/limits在两个进程上运行时,一个显示大32767限制,而另一个显示原始1024限制。我想检查我的~/.bashrc和,~/.bash_profile但它们没有改变我的ulimit

我困惑了!

我还可以检查和尝试什么来提高我的ulimit -nsystemdSELinux 可能与此有关吗? 感谢您的帮助。

编辑:根据 @Gerrit 的建议,我运行了该命令systemd-cgls,结果显示实际上我在本地用户下运行的所有程序都在:

-.slice
├─user.slice
│ ├─user-1005.slice
│ │ ├─session-2.scope
│ │ │ └─[many entries here]
│ │ └─[email protected]
│ │   └─[many entries here]

答案1

在 240 版之前的 systemd 设置中,所有用户进程都在内核建议的默认用户资源限制下运行,在 RHEL 8.1 中,硬限制似乎为 4096,软限制为 1024。在 systemd 240 中,此限制已更改为将默认硬限制设置为 512K,默认软限制保持不变,以避免程序为每个潜在文件描述符保留内存或其他兼容性问题。

您可以在 /etc/systemd/system.conf 中的 [Manager] 部分使用 DefaultLimitNOFILE= 设置更改 NOFILE 的默认 HARD 限制。需要重新启动才能使此设置生效。

/etc/security/limits.conf之后,您确实可以通过设置来提高 NOFILE 的默认软限制* soft nofile nnnn。无需将 pam_limits 添加到 /etc/pam.d/login,至少在 Centos 7 中不需要,因为它已通过 /etc/pam.d/system-auth 包含在内。

相关内容