如何读取java启动的进程的内存和CPU使用情况

时间:2015-06-20 09:56:26

标签: java

我正在使用

启动java进程
  

Runtime.getRuntime()。exec(" java -jar javaprogarm.jar");

我想监视启动ram的进程,并且CPU使用是否有办法以跨平台的方式执行此操作?

编辑:澄清我不是在寻找总体系统cpu和ram的使用情况,而是使用我正在启动的那个进程。被认为是重复的问题是寻找系统cpu和ram而不仅仅是一个进程

3 个答案:

答案 0 :(得分:0)

试试这个:

1)保存所有正在运行的进程:

private List<String> processes = new ArrayList<String>();

2)获取所有java运行进程:

private void getRunningProcesses() throws Exception {
    Process process = Runtime.getRuntime().exec("top -b -n1 -c");
    InputStream is = process.getInputStream();
    InputStreamReader isr = new InputStreamReader(is);
    BufferedReader br = new BufferedReader(isr);
    String line;
    while ( (line = br.readLine()) != null) {
        if( line.contains("java") ) processes.add( line );  
    }   
}

3)从PID获取信息行(首先是getRunningProcesses()):

private String getByPid( int pid ) {
    for ( String line : processes ) {
        if ( line.startsWith( String.valueOf( pid ) ) ) {
            return line;
        }
    }
    return "";
}

4)现在你有了一条包含来自该PID的所有“顶部”信息的行。获取CPU%:

private Double getCpuFromProcess( String process ) {
    //PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
    Double result = 0.0;
    String[] items = process.replace("  "," ").replace("  "," ").split(" ");
    result = Double.valueOf( items[8].replace(",", ".") );
    return result;
}

完成。

编辑:不要忘记在每次通话前清除进程列表。

编辑2:致电

getRunningProcesses(),然后是getCpuFromProcess( getByPid( the_pid ) )

答案 1 :(得分:-2)

Runtime.getRuntime().freeMemory()
Runtime.getRuntime().totalMemory()

也许这些方法会对你有所帮助。返回的长值以字节为单位。

答案 2 :(得分:-2)

使用jvisualvm工具 它位于bin文件夹中的Java JDK安装中 它是一个图形工具,您可以选择正在运行的Java VM 在Monitor选项卡中,您可以看到CPU和内存(堆)的使用情况。