如何配置使用者的程序打開文件限制?
在 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 也是可配置的。