该命令是“ ulimit -Sn”,以及调用它的Java代码,如下所示
Process process = Runtime.getRuntime().exec(new String[] { "bash", "-c", cmd });
process.waitFor();
BufferedReader outputReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = "";
while ((line = outputReader.readLine()) != null) {
output.append(line + "\n");
}
System.out.println(output.toString());
我在shell中运行命令的结果是1024,但是在同一shell中运行java代码的结果是4096。为什么?
答案 0 :(得分:0)
您正在要求为您的进程配置的打开文件描述符的最大数量的软限制。
再次:为您的流程配置。不同的进程可以配置不同的ulimit。
例如,如果其中之一是从systemd服务启动的,则LimitNOFILE=4096
将提供一个新值。
如果其中之一是从调用ulimit
命令的脚本启动的,则那个可以提供新值。
如果其中之一是由配置了PAM规则的用户帐户,服务或登录机制启动的,则这也可以提供新的值。
顺便说一下,在Linux上,您可以通过读取文件/proc/self/limits
以完全独立于语言的方式提取此值。通过用其他进程的PID代替self
,您可以在不同进程之间进行读取和比较。