0
嗨,我想獲得CPU負載,但我越來越接受每個值更多然後100%不明白我在做什麼錯誤..。我沒有得到cpu的百分比linux的負載java
因爲我使用的酷睿i3以及它和一個虛擬機有兩個虛擬機我正在做這個任務我的源代碼,
public class PerformanceMonitor {
static long lastSystemTime = 0;
static long lastProcessCpuTime = 0;
public static int availableProcessors = ManagementFactory.getOperatingSystemMXBean().getAvailableProcessors();
// public static int availableProcessors = Runtime.getRuntime().availableProcessors();
public synchronized double getCpuUsage()
{
ManagementFactory.getThreadMXBean().setThreadCpuTimeEnabled(true);
if (lastSystemTime == 0)
{
baselineCounters();
// return ;
}
long systemTime = System.nanoTime();
long processCpuTime = 0;
processCpuTime = ManagementFactory.getThreadMXBean().getCurrentThreadCpuTime();
double cpuUsage = (double) (processCpuTime - lastProcessCpuTime)/(systemTime - lastSystemTime)*100.0;
lastSystemTime = systemTime;
lastProcessCpuTime = processCpuTime;
return cpuUsage/availableProcessors;
}
private void baselineCounters()
{
lastSystemTime = System.nanoTime();
lastProcessCpuTime = ManagementFactory.getThreadMXBean().getCurrentThreadCpuTime();
}
}
,我在我的代碼使用這個類,
public static void main(String[] args) {
monitor = new PerformanceMonitor();
for(int i=0 ; i<10000 ; i++){
start();
double usage = monitor.getCpuUsage();
if(usage!=0)System.out.println("Current CPU usage in pourcentage : "+usage);
}
}
private static void start() {
int count=0;
for(int i=0 ; i<100000 ; i++){
count=(int) Math.random()*100;
}
}
}
我得到這樣的輸出,
Current CPU usage in pourcentage : 114.32926829268293
Current CPU usage in pourcentage : 48.70208931963182
Current CPU usage in pourcentage : 193.08746862328633
Current CPU usage in pourcentage : 236.85457129322594
希望您的建議在此先感謝
數字我一直搞不明白什麼是你想告訴我,我得到的值,因爲有保險業監督while循環實際上我只能得到一個值,那麼如果它基於循環持續時間會發生什麼? – 2012-03-08 09:09:12
期限越短,結果越不準確。對於接近0.01秒的持續時間來說,這是非常不準確的,並且比這更少是毫無意義的。 – 2012-03-08 09:26:17
Pete我想在5分鐘後得到這個值,然後在5分鐘後再次得到一個值,然後對於這個patren,我該怎麼做才能獲得準確的值? – 2012-03-08 09:47:36