有没有办法限制java processbuilder启动的进程的内存消耗? 要么 获得进程使用的最大内存?
我尝试使用以下代码..但总是返回0.
Y combinator
如果问题很愚蠢,我是初学者......请原谅...
答案 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
开始的进程。