Java getCpuLoad()方法使用异常及JDK实现相关疑问
关于OperatingSystemMXBean.getCpuLoad()始终返回0的问题
我尝试用以下Java代码获取当前CPU负载:
while (true) { OperatingSystemMXBean os = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); System.out.println("CPU Load: " + os.getCpuLoad() * 100 + "%"); }
此时我正在运行stress --cpu 4,实际CPU负载约为20%,但代码输出始终为0%。查阅JDK文档,该方法说明是“返回操作系统环境的‘近期CPU使用率’”。
在while循环内添加Thread.sleep(1000)后,输出结果符合预期。这说明调用getCpuLoad()之间需要一定时间间隔,因为它需要在时间段内收集系统统计数据。
我还做了无循环的两次打印测试:
Thread.sleep(1000); OperatingSystemMXBean os = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); Thread.sleep(1000); System.out.println(os.getCpuLoad() * 100 + "%"); // 始终为0% Thread.sleep(1000); System.out.println(os.getCpuLoad() * 100 + "%"); // 约为20%
结果显示首次调用getCpuLoad()始终返回0,这让我困惑:这是否是JDK实现的陷阱?为何JDK文档未添加相关使用警告?
环境配置:
- OS: 5.15.91-1-MANJARO
- JDK: openjdk 17.0.6 2023-01-17 LTS
内容的提问来源于stack exchange,提问作者chenzhongpu
相关产品推荐
相关产品推荐

