我搜索了stackoverflow这个问题,但我没有得到任何有用的答案。我想获得使用的内存和外部进程所花费的时间,这些进程由Java中的ProcessBuilder调用。如果进程超过时间限制/内存限制,那么我需要杀死它。
要计算我使用以下代码的过程所花费的时间:
process = new ProcessBuilder(command).start();
starttTime = System.currentTimeMillis();
flag=false;
while (flag != true) {
try {
returnValue = process.exitValue();
flag = true;
if (returnValue != 0) {
System.out.println("Abnormal termination");
} else {
System.out.println("Normal termination");
}
System.out.println("Done");
} catch (IllegalThreadStateException e) {
}
currentTime = System.currentTimeMillis();
if (currentTime - startTime > timeLimitInMilli) {
System.out.println("process exceeding time limit");
break;
}
}
但这种计算时间的方法很慢。有没有更快的方法来做同样的事情。此外,我无法获得该进程使用的内存。我怎么能得到它?
此外,多个线程正在使用此代码,这意味着不同的线程一次调用多个进程。
答案 0 :(得分:1)
一种解决方案是运行包装器脚本而不是直接运行命令。该脚本的目的是检查执行时间和内存使用情况(使用OS实用程序)并返回错误代码以指示任何问题。
或者,您可以使用JNI或其他特定于操作系统的命令来确定其他进程的内存使用情况。
如果其他进程是JVM或其他程序将报告其内存使用情况(例如,通过MXBean),那么您的循环可以直接请求它报告内存使用情况。