如何读取由java启动的进程的内存和cpu使用率

如何读取由java启动的进程的内存和cpu使用率,java,Java,我正在使用 getRuntime().exec(“java-jarjavaprogarm.jar”) 我想监控启动ram和CPU使用的进程有没有跨平台的方法 编辑:为了澄清,我不是在寻找系统cpu和ram的总使用量,而是我正在启动的一个进程的使用量。被认为是重复的问题是寻找系统cpu和ram,而不仅仅是单个进程 Runtime.getRuntime().freeMemory() Runtime.getRuntime().totalMemory() 也许这些方法会对你有所帮助。返回的长值以字节为

我正在使用

getRuntime().exec(“java-jarjavaprogarm.jar”)

我想监控启动ram和CPU使用的进程有没有跨平台的方法

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

Runtime.getRuntime().freeMemory()
Runtime.getRuntime().totalMemory()
也许这些方法会对你有所帮助。返回的长值以字节为单位。

使用该工具。
它位于Java JDK安装的
bin
文件夹中。
它是一个图形化工具,您可以选择运行的Java虚拟机。
在监视器选项卡中,您可以看到CPU和内存(堆)的使用情况。

尝试以下方法:

1) 要保留所有正在运行的进程,请执行以下操作:

private List<String> processes = new ArrayList<String>();
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()),请执行以下操作:

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))

重复不是重复。OP希望使用
Runtime.getRuntime().exec()
在代码中启动进程,然后使用启动进程的相同代码检查此进程。。。(可以是分离的螺纹)。我只是在找同样的。不是外部分析。不是检查整个CPU虚拟机。如果我在寻找系统内存,他们会这样做,但我只是在寻找单个进程的信息。我不想在启动它的程序之外分析程序,而是能够从启动它的程序中监视它。顺便说一下,您的
javaprogram.jar
将在
项中[11] 
(命令)
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;
}