Debian:太多打开的文件

我在Debian有很长时间的运行过程。 在抛出一些错误“太多打开的文件”。

ulimit -a

节目

打开文件(-n)1024

我希望增加2次打开文件的数量。 执行后

ulimit -n 2048

该限制是活动的,直到我的会话结束,这是不适用于任务。

我怎样才能永久增加打开文件的数量?

如果您的进程是通过脚本启动的,那么您可以在执行守护进程之前将调用放到脚本中。

如果您希望增加用户或所有用户的限额,则可以设置在login时通过pam_limits应用的限制。 这些在/etc/security/limits.conf中设置。 在你的情况下,你可以做一些事情:

* hard nofile 2048 

请注意,“硬”表示一个硬性限制 – 一个不能超越的限制,不能被改变。 软限制可以由用户改变(例如,没有root权限的人),但不能超出硬限制。

阅读“limits.conf”以获取更多关于使用pam_limits的信息。

内核中设置的打开文件的“最大值”也可以通过以下方式检查当前设置:

 cat /proc/sys/fs/file-max 

并设置一个新的价值:

 echo "104854" > /proc/sys/fs/file-max 

如果你想保持重启之间的configuration添加

 sys.fs.file-max=104854 

 /etc/sysctl.conf 

要检查当前最大文件使用情况:

 [root@srv-4 proc]# cat /proc/sys/fs/file-nr 3391 969 52427 | | | | | | | | maximum open file descriptors | total free allocated file descriptors total allocated file descriptors (the number of file descriptors allocated since boot) 

正如其他人所说,您可以在/etc/security/limits.conf中为每个用户或组应用特定限制。

注意:ulimit -n显示软限制。

 ulimit -H -n 

会显示你的硬性限制。

这使ulimit -a和ulimit -n输出相当混乱,例如,如果您将文件数从1024提高到4096,就像您期望看到硬限制输出一样,但是您仍然看到1024是软限制。

此外,请记住,这些限制是每个login强制执行的,所以重新login到一个新的shell并检查您的更改,不要指望它们传播到现有的login名。

请注意,如果通过start-stop-daemon来运行进程,则在/etc/security/limits.conf中设置ulimits不起作用。 例如,如果您想将tomcat的打开文件限制提高到20000,则需要将这些文件添加到/etc/default/tomcat

 ulimit -Hn 32768 ulimit -Sn 32768 

我在Debian 6.0.4上遇到了这个问题。对于其他的过程,给出的答案应该有所帮助。

这取决于你如何开始你的长期运行的过程。 如果它是在启动时启动的(通过/etc/rcX.d/*脚本),那么你必须在你的启动脚本中join一个ulimit调用,因为默认的限制是由内核设置的,并且在不重新编译的情况下是不可调整的。

使用/etc/security/limits.conf可以工作,如果你使用cron来启动它,例如这样的条目:

 @reboot $HOME/bin/my-program 

这应该工作,因为/etc/pam.d/cron启用pam_limits.so。

一个非常好的命令是ulimit -n但是有太多的连接和打开的文件太多的问题:

 core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 519357 max locked memory (kbytes, -l) 32 max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 10240 cpu time (seconds, -t) unlimited max user processes (-u) 1024 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited 

您可以将其添加到/etc/security/limits.conf中

 root soft nofile 100000 root hard nofile 100000 

保存然后重启。