我没有得到linux java的cpu负载百分比
嗨,我试图得到cpu负载,但我得到的每值超过100%,不明白我做错了什么 由于我使用core i3,在它上面有两个虚拟机,在一个VM上,我正在执行这个任务,我的源代码是我没有得到linux java的cpu负载百分比,java,linux,Java,Linux,嗨,我试图得到cpu负载,但我得到的每值超过100%,不明白我做错了什么 由于我使用core i3,在它上面有两个虚拟机,在一个VM上,我正在执行这个任务,我的源代码是 public class PerformanceMonitor { static long lastSystemTime = 0; static long lastProcessCpuTime = 0; public static int availableProcesso
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;
}
}
}
希望您的建议提前谢谢我想时间间隔太短了。linux上的cpu计数器每秒仅更新100次,您可能会在大约1/100秒的时间内执行循环,这意味着您会遇到非常大的错误。尝试增加循环的长度,使其为几秒钟长
我延长了测试时间,删除了可用的处理器,得到了如下数字
Current CPU usage in percentage : 99.95763231535723
Current CPU usage in percentage : 99.94895863534565
Current CPU usage in percentage : 99.40642907762789
Current CPU usage in percentage : 99.96184668521532
Current CPU usage in percentage : 99.89017532820115
Current CPU usage in percentage : 99.91157680329947
Current CPU usage in percentage : 99.96919753553432
Current CPU usage in percentage : 99.94121334997978
我不明白你想告诉我什么,因为我得到的是值,因为有一个while循环,实际上我只需要得到一个值,那么如果它基于循环持续时间,会发生什么?周期越短,结果越不准确。对于接近0.01秒的持续时间,它是非常不准确的,小于此值是没有意义的。Pete我想在5分钟后获取此值一次,然后在5分钟后再次获取一个值,那么对于此patren,我应该如何获得准确的值?如何增加其循环时间意味着在代码中的什么位置?5分钟就足够了。我跑了大约5秒钟
Current CPU usage in percentage : 99.95763231535723
Current CPU usage in percentage : 99.94895863534565
Current CPU usage in percentage : 99.40642907762789
Current CPU usage in percentage : 99.96184668521532
Current CPU usage in percentage : 99.89017532820115
Current CPU usage in percentage : 99.91157680329947
Current CPU usage in percentage : 99.96919753553432
Current CPU usage in percentage : 99.94121334997978