未为应用程序设置软限制

未为应用程序设置软限制

我正在尝试增加应用程序的最大打开文件数,但我的尝试没有成功。硬限制已正确设置,但软限制仍保留默认值 1024。

在 start() 函数下/etc/init.d/[application],在执行任何其他命令之前我有这两行:

ulimit -Sn 64512 2> /dev/null
ulimit -Hn 80896 2> /dev/null

但是当我检查下的限制时/proc/[pid]/limits,硬限制是80896,但软限制是1024。

由于应用程序以 root 身份运行,因此我在下面添加了一个新的 .conf 文件,/etc/security/limits.d/其中包含以下条目:

root    soft    nofile    64512
root    hard    nofile    80896

但没有任何变化/proc/[pid]/limits

如何为特定应用程序永久设置最大打开文件限制?

我正在 RHEL 6.10 中进行测试

答案1

在阅读了 ulimit 的用户与进程的一些参数之后(这里)和 @binarysta 评论,并一遍又一遍地阅读 ulimit 手册页,我意识到我的 init.d 方法可以工作,但我以错误的顺序进行。硬限制是用户可以增加其自己的软限制的绝对最大值,因此如果在执行时大于硬限制,则首先设置的软限制将被忽略。

因此,不要这样做:

root    soft    nofile    64512
root    hard    nofile    80896

你必须这样做:

root    hard    nofile    80896
root    soft    nofile    64512

再次证明,顺序很重要。

所以/etc/init.d/[application]

start() {
ulimit -Hn 80896 2> /dev/null
ulimit -Sn 64512 2> /dev/null
[rest of start function]
}

restart() {
# only if restart() function does not call start()
ulimit -Hn 80896 2> /dev/null
ulimit -Sn 64512 2> /dev/null
[rest of restart function]
}

留下这个问题/答案以防其他人遇到同样的问题。

相关内容