在Linux上,每个进程的默认打开文件限制为1024。对于某些守护程序,这还不够。因此,存在一个问题:如何更改特定用户的打开文件限制?
在Linux上,每个进程的默认打开文件限制为1024。对于某些守护程序,这还不够。因此,存在一个问题:如何更改特定用户的打开文件限制?
Answers:
在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)
该系统也是可配置的。