Ubuntu
通過 2^21 時 Openfiles 限制自動降低,Ubuntu 16.04
在嘗試設置
nofile
有關我的使用者的硬限制和軟限制時,我注意到了一種奇怪的行為(當然有sudo
特權)。我的整體系統界限是 2^22,即使將其設置為 2^23,我也嘗試執行以下操作。
我設法完美地將軟限制和硬限制設置為 2^20,沒有任何問題。(這意味著在我使用它們對它們進行採樣後,
ulimit -Sn,and -Hn
我得到了我剛剛設置的值)。當我將它們設置為 2^21 或更高時,在我重新登錄使用者(以應用更改)後,硬限制和軟限制分別降低到 4096 和 1024 。
我在網上找不到任何關於它的資訊,我懷疑它與用於儲存這些值的變數類型有關(我個人希望它在 2^32 甚至 2^33 左右如果它們被定義為
uint
,但絕對不是這樣)。
似乎有兩個系統範圍的限制,記錄在Documentation/sysctl/fs.txt
fs.file-max
是整個系統上打開文件(文件句柄)的最大數量。fs.nr_open
是每個程序打開文件數的全域上限,它限制了 的值RLIMIT_NOFILE
,即ulimit -n
設置的值。不出所料,預設值為 1024*1024,即 2^20。所以:
# sysctl fs.nr_open fs.nr_open = 1048576 # ulimit -Hn 1048577 -su: ulimit: open files: cannot modify limit: Operation not permitted # sysctl fs.nr_open=$[ 2**22 ] fs.nr_open = 4194304 # ulimit -Hn 4000000 # now it can be set
但
file-max
似乎並沒有阻止設置每個程序的限制,我一直設置這個:# sysctl fs.file-max fs.file-max = 262144
因此,無論設置您的限制(
pam_limits.so
?),由於 sysctl 設置的限制,它可能會獲取並忽略系統呼叫上的錯誤。或者它可能會在某處記錄錯誤,請檢查您的日誌。