用第一個java虛擬機啟動另一個虛擬機,並用第一個虛擬機的java程序去測試另一個虛擬機上java程序運行時的內存,CPU資源占用情況。
解決問題的限制和條件:
1》兩個虛擬機運行在同台Windows_X86機上。
2》只需要知道第二個虛擬機上運行程序時,第二個虛擬機的內存、CPU使用情況。
3》目的是:測試不同的程序在同個虛擬機上資源使用差別。
解決問題的關鍵:
第一 如何啟動另一虛擬機運行測試的java程序。
第二 如何用第一個虛擬機裡的java程序,監視另一個虛擬機與其相關進程的運行情況。
解決辦法:
一、使用java.io中的函數(命令試過沒問題,程序請按下面提示完成)
使用java.io中的函數
Runtime.getRuntime()。exec("系統命令");
這裡我給一個帶命令參數的例子
Runtime r=Runtime.getRuntime();
Process p=null;
String cmd[]={"命令","參數"};
try{
p=r.exec(cmd);
}
catch(Exception e){
System.out.println("error executing: "+cmd[0]);
}
這裡要使用到的系統命令有幾個:
path/java file
用第二個jvm(path為第二個jre/bin/地址)運行java程序file
tasklist > log.txt
將當前系統進程寫以“任務管理器”的格式()寫入log.txt文件中,關於tasklist使用細節,如查詢某個進程ID的信息可以使用命令 >tasklist /? 進行查詢
這兩步均在第一個虛擬機完成,簡單!!!
二、常規方法使用JNI
這裡我給一套解決方案,網上有很多相關代碼,自己去找找;
這套方案也可以實現,這裡我使用簡單的實現方法用C#來做監控,但這這個方案明顯有其不足之處;就是測試對象的JNI接口會被觸發,當然,如果不要求數據的准確性,單從比較的角度去看,只要運行的沒有本身沒有使用到JNI這個方案還是可行的。