我正在使用
启动java进程Runtime.getRuntime()。exec(" java -jar javaprogarm.jar");
我想监视启动ram的进程,并且CPU使用是否有办法以跨平台的方式执行此操作?
编辑:澄清我不是在寻找总体系统cpu和ram的使用情况,而是使用我正在启动的那个进程。被认为是重复的问题是寻找系统cpu和ram而不仅仅是一个进程
答案 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和内存(堆)的使用情况。