如何配置用户的进程打开文件数限制?


8

在Linux上,每个进程的默认打开文件限制为1024。对于某些守护程序,这还不够。因此,存在一个问题:如何更改特定用户的打开文件限制?

Answers:


16

在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)

该系统也是可配置的。


1
感谢您提供最后的信息-我想弄清楚为什么我无法在/etc/security/limits.conf
中将
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.