我正在尝试增加应用程序的最大打开文件数,但我的尝试没有成功。硬限制已正确设置,但软限制仍保留默认值 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]
}
留下这个问题/答案以防其他人遇到同样的问题。