Ulimit

增加未在 RHEL 8.1 中應用的 ulimit 打開文件

  • April 10, 2020

我有一個完全更新的 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/limitsor時prlimit,相關的輸出行仍然顯示:

NOFILE     max number of open files                1024      4096 files

我現在唯一的線索是,當我使用 Gnome 的系統活動應用程序查看我的程序時,當我打開一個終端視窗時,有兩個 bash程序都在我的本地使用者下。奇怪的是,當我cat /proc/[process id]/limits在兩個程序上執行時,一個顯示大32767限制,而另一個顯示原始1024限制。我想檢查我的~/.bashrc~/.bash_profile但他們沒有改變我的ulimit.

我難住了!

我還可以檢查和嘗試什麼來增加我的ulimit -n? 或者 SELinux可能systemd與它有關嗎?感謝您的幫助。

**編輯:**根據@Gerrit 的建議,我執行systemd-cgls它說幾乎所有在我的本地使用者下執行的東西都在:

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

在版本 240 之前的 systemd 設置中,所有使用者程序都在核心建議的預設使用者資源限制下執行,在 RHEL 8.1 上,硬限制似乎是 4096,軟限制是 1024。在 systemd 240 中,這已更改為將預設硬限制設置為 512K,預設軟限制保持不變,以避免程序為每個潛在的文件描述符或其他兼容性問題保留記憶體的問題。

您可以在 /etc/systemd/system.conf 中更改 NOFILE 的預設 HARD 限制

$$ Manager $$具有 DefaultLimitNOFILE= 設置的部分。需要重新啟動才能使其生效。 之後,您確實可以通過設置 NOFILE 來提高預設的軟/etc/security/limits.conf限制* soft nofile nnnn。不需要將 pam_limits 添加到 /etc/pam.d/login,至少在 Centos 7 中不需要,因為 /etc/pam.d/system-auth 已經包含了。

引用自:https://serverfault.com/questions/1011693