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 也是可配置的。