Ubuntu

通過 2^21 時 Openfiles 限制自動降低,Ubuntu 16.04

  • March 14, 2017

在嘗試設置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 設置的限制,它可能會獲取並忽略系統呼叫上的錯誤。或者它可能會在某處記錄錯誤,請檢查您的日誌。

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