Java ProcessBuilder启动的进程的内存消耗

时间:2017-06-07 19:50:49

标签: java

有没有办法限制java processbuilder启动的进程的内存消耗? 要么 获得进程使用的最大内存?

我尝试使用以下代码..但总是返回0.

Y combinator

如果问题很愚蠢,我是初学者......请原谅...

2 个答案:

答案 0 :(得分:2)

ProcessBuilder构造函数提供了一种为程序设置参数的方法 例如,你有:

public ProcessBuilder(String... command) 

其中命令参数vargs包含程序,但如果提供则包含其参数。

你还有一个提供相同目标的构造函数,但参数为List

public ProcessBuilder(List<String> command) 

在你的情况下,如果你的程序是一个Java程序,你可以编写类似的东西来限制进程使用的最大内存512M:

ProcessBuilder processBuilder = 
        new ProcessBuilder(pathToTheJavaCommand, "-Xmx512m", "-cp", classpath, yourClass);

如果您的程序不是Java程序,则程序会提供一个参数来设置为其分配的最大内存,或者您使用特定于操作系统的功能来限制消耗的内存。但第二种情况并不是必要的,因为如果程序绝对需要内存,它可能会对启动的程序产生严重的副作用。

最后,Runtime.getRuntime()返回与当前Java应用程序关联的运行时对象,而不是上次启动的Process的运行时对象。

答案 1 :(得分:2)

不,使用ProcessBuilder开始的进程是操作系统进程,并且无法控制从JVM /使用Java API限制其资源的方式。但是,在使用操作系统API(例如,Linux上的cgroups)获取Process的PID后,您可以尝试限制资源。

另外,这个:

after = Runtime.getRuntime().totalMemory()-Runtime.getRuntime().freeMemory();

ProcessBuilder(除了Java为ProcessBuilder对象进行的分配之外)与您的思维方式无关。它返回Java Runtime的内存,而不是您使用ProcessBuilder开始的进程。