Process

如何配置使用者的程序打開文件限制?

  • May 4, 2014

在 Linux 上,每個程序的預設打開文件限制為 1024。對於某些守護程序,這還不夠。因此,問題是:如何更改特定使用者的打開文件限制?

在 Linux 上,您可以通過 配置它limits.conf,例如通過

# cd /etc/security
# echo debian-transmission - nofile 8192 > limits.d/transmission.conf

(它將在使用者 debian-transmission 下啟動的程序的硬限制和軟限制都設置為 8192)

您可以通過以下方式驗證更改:

# sudo -u debian-transmission bash -c "ulimit -a"
[..]
open files                      (-n) 8192
[..]

如果守護程序已經在執行,則必須重新啟動它以獲取新的限制。如果守護程序是從使用者會話手動啟動的,則使用者必須重新登錄才能獲得新的限制。

或者,您/etc/security/limits.conf當然也可以直接在 中指定額外的限制 - 但我更喜歡.d目錄方法以獲得更好的可維護性。

為了執行不同的軟/硬限制,請使用兩個條目,例如

debian-transmission soft nofile 4096
debian-transmission hard nofile 8192

(這背後的原因:軟值是在使用者登錄後設置的,但允許使用者程序將限制增加到硬限制)

limits.conf/limits.d配置由 使用,pam_limits.so在目前 Linux 發行版上預設啟用。

有關的

Linux 上還有一個系統範圍的限制/proc/sys/fs/file-max

該文件定義了系統範圍內所有程序的打開文件數限制。

例如 Ubuntu 10.04 上的預設值:

$  cat /proc/sys/fs/file-max
786046

偽文件/proc/sys/fs/file-nr提供更多資訊,例如

$ cat /proc/sys/fs/file-nr
1408    0   786046

分配的文件句柄數(即目前打開的文件數);空閒文件句柄的數量;和文件句柄的最大數量

因此,一方面,您可能還必須調整系統範圍的file-max限制,以防它非常小和/或系統已經非常負載。另一方面,僅僅增加file-max是不夠的,因為它不會影響 pam_limits 機制強制執行的軟/硬限制。

file-max在命令行上更改(無需重新啟動):

# sysctl -w fs.file-max=786046

對於永久更改,添加fs.file-max=786046/etc/sysctl.conf/etc/sysctl.d

上限fs.file-max記錄在 中fs.nr_open。例如,(再次)在 Ubuntu 10.04 上:

$ sysctl -n fs.nr_open
1048576

(即 1024*1024)

這個 sysctl 也是可配置的。

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