Debian 中打开的文件过多

Debian 中打开的文件过多

我在 Debian 上有一个长时间运行的进程。在某个时刻抛出一个错误:

打开的文件过多。

跑步:

ulimit -a

显示:

打开文件(-n)1024

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

ulimit -n 2048

该限制在我的会话结束前一直有效,但不适用于该任务。

我如何才能永久增加打开文件的数量?

答案1

如果您的进程是通过脚本启动的,则可以在执行守护进程之前在脚本中调用 ulimit。

如果您希望增加用户或所有用户的 ulimit,您可以设置在pam_limits登录时应用的限制。这些限制在 中设置/etc/security/limits.conf。对于您来说,您可以执行以下操作:

*               hard    nofile             2048

请注意,“hard” 表示硬限制 - 无法超过且无法更改的限制。用户可以更改软限制(例如,没有 root 权限的人),但不能超出硬限制。

阅读limits.conf以了解有关使用的更多信息pam_limits

答案2

内核中还设置了打开文件的“最大总数”,您可以使用以下命令检查当前设置:

cat /proc/sys/fs/file-max 

并使用以下命令设置新值:

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

如果要在重启之间保留配置,请添加

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)

答案3

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

ulimit -Hn 32768
ulimit -Sn 32768

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

答案4

这取决于您如何启动长时间运行的进程。如果它是在启动时启动的(通过 /etc/rcX.d/* 脚本),那么您必须在启动脚本中放置一个 ulimit 调用,因为默认限制是由内核设置的,如果不重新编译,则无法对其进行调整。

/etc/security/limits.conf如果您使用cron如下命令来启动它,那么使用可能会有效:

@reboot $HOME/bin/my-program

这应该可行,因为 /etc/pam.d/cron 启用了 pam_limits.so。

相关内容