Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我没有得到linux java的cpu负载百分比_Java_Linux - Fatal编程技术网

我没有得到linux java的cpu负载百分比

我没有得到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

嗨,我试图得到cpu负载,但我得到的每值超过100%,不明白我做错了什么

由于我使用core i3,在它上面有两个虚拟机,在一个VM上,我正在执行这个任务,我的源代码是

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