在 /etc/sysctl.conf 和 /etc/security/limits.conf 中设置打开文件限制有什么区别?

MrD*_*Duk 9 linux ubuntu file-descriptors sysctl ulimit

我已经阅读了两种增加允许打开文件数的不同方法(如果重要的话,我正在尝试为 root 进行修改)。

一种方法是使用以下内容更新设置/etc/security/limits.conf

*                soft    nofile          500000

*                hard    nofile          500000

root             soft    nofile          500000

root             hard    nofile          500000
Run Code Online (Sandbox Code Playgroud)

要为活动 shell 进行设置,看起来您只需执行ulimit -n 500000,这不需要重新启动或注销/登录,但可能需要重新启动服务 (?)。


另一种选择是更新/etc/sysctl.conf

echo 'fs.file-max = 500000' >> /etc/sysctl.conf
Run Code Online (Sandbox Code Playgroud)

要对活动 shell 进行设置,我们可以执行sysctl -p,并使用 进行验证sysctl fs.file-max

所以我的问题是,有什么区别?有吗?我上线了Ubuntu 14.04.2 LTS

Aus*_*arn 10

不同之处在于范围及其应用方式。通过 sysctls 设置的打开文件限制适用于整个系统,而通过设置的限制/etc/security/limits.conf仅适用于满足此处指定标准的内容。另一个主要区别是/etc/security/limits.conf限制是通过 ulimit 应用的,因此可以更容易地更改,而 sysctl 限制本质上是在内核本身中设置内存分配限制。

作为一般规则,您几乎总是想使用/etc/security/limits.conf,即使您在那里设置了通配符匹配的全局限制,因为它更可靠一点,并且当遇到 ulimit 限制时,事情通常会比使用内核内存分配更优雅地失败限制。