事实证明,问题在于我的程序正在作为新贵的初始化脚本运行,并且该
exec节未调用shell。
ulimitlimits.conf中的设置仅适用于Shell中的用户进程。
我通过将exec节更改为
exec sudo -u username java $JAVA_OPTS -jar program.jar
它在用户名的默认外壳中运行java。这使程序可以使用所需数量的打开文件。
我已经看到它提到您也可以
ulimit-n在调用命令之前先进行调用。对于新贵的脚本,我认为您应该改用
script节。
我发现了一个更好的诊断比
lsof是
ls /proc/{pid}/fd | wc-l,获得打开的文件描述符的精确计数。通过监视,我可以看到失败是在4096个打开的fds处发生的。我不知道4096的来源。它不在/etc中的任何地方;我猜它已经编译进内核了。



