我正在嘗試透過 增加 root 使用者和非 root 使用者的開啟檔案限制/etc/security/limits.conf
。但是,無法過去999999
,任何高於此值的值都會恢復為預設值1024
,我也無法將其設為無限制
這是我的limits.conf
* hard nofile 999999
* hard nofile 999999
root hard nofile 999999
root soft nofile 999999
以上工作正常並ulimit -n
返回999999
。
但是,如果我將值提高一級或到unlimited
或-1
或則infinity
不起作用。ulimit -n
返回1024
我在這裡提到:limit.conf - pam_limits 模組的設定檔 | Ubuntu 線上說明頁
謝謝
答案1
我知道晚了 10 個月,但您已為所有用戶設定了兩次硬限制。將第二行更改為軟 ulimit。
* hard nofile 999999
* soft nofile 999999
root hard nofile 999999
root soft nofile 999999
執行此操作後,您應該會看到:
$ ulimit -n
999999
$
您的文件應該始終適用於 root,因為限制已正確定義。
此外,您不能使用 -1、無窮大、無限制等,您必須使用文字值。支援的最大值在核心中定義,並在 /proc/sys/fs/nr_open 中公開。在我的 centos 7 和 debian strech 環境中,我得到相同的值:
$ cat /proc/sys/fs/nr_open
1048576
$
您還必須啟動新會話才能更新限制。
答案2
要使其正常運作,需要修改三個檔案:
/etc/security/limits.conf
/etc/pam.d/common-session
/etc/pam.d/common-session-noninteractive
您已經在第一個文件中新增了所需的行,然後在其他兩個文件中需要此行:
session required pam_limits.so
請注意:
大多數資源忽略強調的是,您的限制確實可以很容易地被負責流程執行的任何東西修改。如果ulimit -n (以正確的用戶身份運行)為您提供了剛剛設置的數字,但cat /proc/{process_id}/limits 仍在打印較低的數字,則幾乎可以肯定您有一個進程管理器、一個初始化腳本,或類似的事情會擾亂你的極限。您還需要記住,進程繼承父進程的限制。
因此,如果存在這樣的進程,那麼您將必須修改設定檔才能使其正常運作。
來源: https://underyx.me/2015/05/18/raise-the-maximum-number-of-file-descriptors