增加未在 RHEL 8.1 中應用的 ulimit 打開文件
我有一個完全更新的 Red Hat Enterprise Linux (RHEL) 8.1 x86_64 系統,作為本地終端中的本地使用者(即不是通過 SSH 遠端),當我執行
ulimit -Sn
它時會說1024
並ulimit -Hn
產生4096
. 我想增加這些數字,因為通常當我編譯大型項目時gcc
,該make
步驟會因too many open files
錯誤而失敗。我什至嘗試將編譯移到podman
容器中,但這並沒有幫助,因為容器只是繼承了我本地使用者的ulimit
s。這是我在主機上嘗試過的:
- 在
/etc/security/limits.conf
我添加了:* soft nofile 32767 * hard nofile 65535 [username] soft nofile 32767 [username] hard nofile 65535
- 我查了一下
ls -a /etc/security/limits.d/
,那裡沒有文件。/etc/sysctl.conf
裡面有一行說明fs.file-max = 65535
。我也跑了sysctl -p
。- 我添加
session required pam_limits.so
到文件末尾/etc/pam.d/login
。ls -a /etc/sysctl.d/
顯示了兩個文件./ ../ 50-libreswan.conf 99-sysctl.conf@
,它們都不包含與打開文件數量相關的任何內容。cat /proc/sys/fs/file-max
說65535
。/etc/systemd/user.conf
是空的(所有行都被註釋掉了),我試圖明確地設置DefaultLimitNOFILE=65535
.嘗試上述方法後,當我執行
cat /proc/self/limits
or時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 已經包含了。