Debian 上打开的文件太多

Fox*_*BOA 17 linux filesystems debian daemon

我在 Debian 有很长的运行过程。在某些时候抛出错误:

打开的文件太多。

跑步:

ulimit -a

显示:

打开文件 (-n) 1024

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

ulimit -n 2048

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

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

Dan*_*son 13

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

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

*               hard    nofile             2048
Run Code Online (Sandbox Code Playgroud)

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

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

  • /etc/security/limits.conf 仅适用于使用 pam 和 pam 模块 pam_limits 的服务(请参阅 /etc/pam.d/ 了解每个服务的 PAM 配置,特别是 /etc/pam.d/common-*) . 因此,它涉及由 sshd、gdm、登录等创建的所有用户会话。它不涉及在启动时启动的所有程序...... (3认同)

rkt*_*hkr 13

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

cat /proc/sys/fs/file-max 
Run Code Online (Sandbox Code Playgroud)

并设置一个新值:

echo "104854" > /proc/sys/fs/file-max
Run Code Online (Sandbox Code Playgroud)

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

sys.fs.file-max=104854
Run Code Online (Sandbox Code Playgroud)

/etc/sysctl.conf
Run Code Online (Sandbox Code Playgroud)

要检查当前的最大文件使用量:

[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)
Run Code Online (Sandbox Code Playgroud)

  • 请注意,如果空闲分配的文件描述符显示“0”,[这仅意味着分配的文件句柄数与已使用的文件句柄数完全匹配。](http://www.linuxinsight.com/proc_sys_fs_file_nr.html) (2认同)

Jan*_*ing 5

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

ulimit -Hn 32768
ulimit -Sn 32768
Run Code Online (Sandbox Code Playgroud)

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