Linux

不能像我想的那樣設置 ulimit -n

  • February 24, 2022

我只想設置 ulimit -n (每個程序最大打開文件數)並讓設置在重新啟動後繼續存在,但事實證明這很困難。

我不知道還有什麼地方可以更改以允許設置它。

root@z:~# cat /etc/sysctl.conf | grep file-max
fs.file-max = 2000000
root@z:~# cat /etc/security/limits.conf | grep nofile
#        - nofile - max number of open files
* soft     nofile         2000000   
* hard     nofile         2000000
root@z:~# sudo sysctl -p | grep file
fs.file-max = 2000000
root@z:~# ulimit -n 2000000
-su: ulimit: open files: cannot modify limit: Operation not permitted
root@z:~# whoami
root

另一方面,這個較低的設置有效:

ulimit -n 1048576

請讓我知道如何將每個程序的限制設置為 2000000,並且要在重新啟動後維護該設置,我使用的是 Ubuntu 18.04

# ulimit -n 1048576
# ulimit -n 2000000
bash: ulimit: open files: cannot modify limit: Operation not permitted
# sysctl fs.nr_open
fs.nr_open = 1048576
# sysctl fs.nr_open=2000000
fs.nr_open = 2000000
# ulimit -n 2000000
# ulimit -n
2000000

proc(5) 手冊頁

/proc/sys/fs/nr_open

該文件對 RLIMIT_NOFILE可以提高資源限制的值施加了上限(請參閱 getrlimit(2))。對於非特權程序和特權程序都強制執行此上限。此文件中的預設值為 1048576。

另一方面,file-max是所有程序的限制:

/proc/sys/fs/file-max

該文件定義了系統範圍內所有程序的打開文件數限制。遇到此限制時失敗的系統呼叫將失敗並顯示錯誤 ENFILE。

並不是說我完全不知道是否有足夠多的打開文件會導致其他問題。

引用自:https://unix.stackexchange.com/questions/640250