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

max*_*zig 8 process limit open-files ulimit

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

max*_*zig 16

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

# cd /etc/security
# echo debian-transmission - nofile 8192 > limits.d/transmission.conf
Run Code Online (Sandbox Code Playgroud)

(它将用户 debian-transmission 下启动的进程的硬限制和软限制设置为 8192)

您可以通过以下方式验证更改:

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

如果守护程序已经在运行,则必须重新启动它以获取新的限制。如果守护程序是从用户会话手动启动的,则用户必须重新登录才能获得新的限制。

或者,您/etc/security/limits.conf当然也可以直接在 中指定其他限制- 但我更喜欢.d目录方法以获得更好的可维护性。

为了实施不同的软/硬限制,请使用两个条目,例如

debian-transmission soft nofile 4096
debian-transmission hard nofile 8192
Run Code Online (Sandbox Code Playgroud)

(这背后的原因:软值是在用户登录后设置的,但允许用户进程将限制增加到硬限制)

limits.conf/limits.d配置用来通过pam_limits.so,这是默认当前Linux发行启用。

有关的

Linux 上还有一个系统范围的限制/proc/sys/fs/file-max

该文件定义了系统范围内所有进程打开文件数的限制。

例如 Ubuntu 10.04 上的默认设置:

$  cat /proc/sys/fs/file-max
786046
Run Code Online (Sandbox Code Playgroud)

伪文件/proc/sys/fs/file-nr提供了更多信息,例如

$ cat /proc/sys/fs/file-nr
1408    0   786046
Run Code Online (Sandbox Code Playgroud)

分配的文件句柄数(即当前打开的文件数);空闲文件句柄的数量;和最大文件句柄数

因此,一方面,您可能还必须调整系统范围的file-max限制,以防它非常小和/或系统已经非常负载。另一方面,仅仅增加file-max是不够的,因为它不会影响由 pam_limits 机制强制执行的软/硬限制。

file-max在命令行上更改(无需重新启动):

# sysctl -w fs.file-max=786046
Run Code Online (Sandbox Code Playgroud)

对于永久性更改,添加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
Run Code Online (Sandbox Code Playgroud)

(即 1024*1024)

此 sysctl 也是可配置的。

  • 感谢您提供的最后一点信息 - 我绞尽脑汁试图弄清楚为什么我无法在 /etc/security/limits.conf 中设置大于 1048576 的用户 nofile 限制 (2认同)