我在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
保存然后重启。