使用的内存和使用Java中的ProcessBuilder调用的外部进程所用的时间

时间:2015-02-05 13:16:30

标签: java multithreading processbuilder

我搜索了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;
                    }

              }

但这种计算时间的方法很慢。有没有更快的方法来做同样的事情。此外,我无法获得该进程使用的内存。我怎么能得到它?

此外,多个线程正在使用此代码,这意味着不同的线程一次调用多个进程。

1 个答案:

答案 0 :(得分:1)

一种解决方案是运行包装器脚本而不是直接运行命令。该脚本的目的是检查执行时间和内存使用情况(使用OS实用程序)并返回错误代码以指示任何问题。

或者,您可以使用JNI或其他特定于操作系统的命令来确定其他进程的内存使用情况。

如果其他进程是JVM或其他程序将报告其内存使用情况(例如,通过MXBean),那么您的循环可以直接请求它报告内存使用情况。