【问题标题】:Set ulimit -n from java从 java 中设置 ulimit -n
【发布时间】:2019-08-01 14:46:12
【问题描述】:

我正在尝试设置运行我的 java 程序的 ulimit。目前,ulimit -n 似乎设置为 4096,因为当我运行此代码(这是我的 java 程序的一部分)时,它输出 4096。

ProcessBuilder processBuilder = new ProcessBuilder("/bin/bash", "-c", "ulimit -n");
try {
  Process process = processBuilder.start();
  // Prints 4096.
  LOGGER_.info(getStringFromInputStream(process.getInputStream()));
} catch (IOException e) {
  // The flow does not reach this catch block.
  LOGGER_.error("exception caught: " + e.getMessage());
}

是否可以将其更改为其他内容,例如 8192?我试过这个:

ProcessBuilder processBuilder2 = new ProcessBuilder("/bin/bash", "-c", "ulimit -n 8192");
try {
  Process process = processBuilder2.start();
  LOGGER_.error("starting agent2...");
  LOGGER_.error(getStringFromInputStream(process.getInputStream()));
} catch (IOException e) {
  LOGGER_.error("exception caught2: " + e.getMessage());
}

try {
  String[] cmdString = new String[3];
  cmdString[0] = "/bin/bash";
  cmdString[1] = "-c";
  cmdString[2] = "ulimit -n 8192";
  Process process = Runtime.getRuntime().exec(cmdString);
  LOGGER_.error(getStringFromInputStream(process.getInputStream()));
} catch (IOException e) {
  LOGGER_.error("exception caught:" + e.getMessage());
}

但我不确定这些是否是正确的方法。另外,如果 ulimit -n 是否被修改。

【问题讨论】:

    标签: java jvm system-calls ulimit


    【解决方案1】:

    ulimit 命令更新当前 进程和所有继承进程的限制。当您使用Runtime.execProcessBuilder 调用ulimit 时,它会启动一个新进程并更新此 进程的限制,而不会影响当前Java 进程。

    为了对自己应用新的限制,Java 进程应该在自己的上下文中调用setrlimit 函数。由于此函数没有 Java 包装器,因此只能通过本机接口调用它:JNI、JNA 或 JNR。

    但是,如果 Java 在非特权用户下运行,那么更新文件限制 (ulimit -n) 无论如何都是无用的,因为 HotSpot JVM 会自动将此限制更新为允许的最大值 - 请参阅 this question

    【讨论】:

      【解决方案2】:

      我做了一个可行的解决方法。我正在使用一个执行 java 程序的 shell 脚本。因此,我在 shell 脚本执行 running-the-java 部分之前设置了 ulimit。正如@apangin 所回答的那样,这设置了 shell 进程的 ulimit,并且从这个 shell 进程产生的 java 进程继承了这个 ulimit。

      【讨论】:

        猜你喜欢
        • 2013-07-22
        • 2014-10-18
        • 1970-01-01
        • 1970-01-01
        • 2013-03-24
        • 2010-10-18
        • 1970-01-01
        • 2022-10-25
        • 1970-01-01
        相关资源
        最近更新 更多