我需要使用 Java 获取CPU 使用情况 和内存使用情况。找到了 com.sun.management.OperatingSystemMXBean 的 getSystemCpuLoad() .根据文档,它返回一个介于 0.0 和 1.0 之间的值。但我总是得到-1。根据文档,当值不可用时返回。但是为什么总是返回负值。是否需要更改任何属性才能获取正确的值?
如果没有,请感谢有人可以建议任何其他方法来获取 CPU 使用率和内存使用率。
我的代码包括:
OperatingSystemMXBean operatingSystemMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
System.out.println(operatingSystemMXBean.getSystemCpuLoad());
最佳答案
com.sun.management.OperatingSystemMXBean 的文档实际上只是说,如果由于某种原因无法访问信息,该方法将返回一个负值。 例如,可能是因为数据尚不可用,或者可能是因为您没有检索此信息所需的特权。
OperatingSystemMXBean 确实在 getSystemCpuLoad 开始返回任何有用信息之前似乎需要一点时间来收集数据。
下面的代码展示了如何测试这一现象。
OperatingSystemMXBean operatingSystemMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
long t = System.currentTimeMillis();
while(System.currentTimeMillis() < t + 5000) {
System.out.println(operatingSystemMXBean.getSystemCpuLoad());
TimeUnit.SECONDS.sleep(1);
}
我亲身经历过的是,当此功能作为 windows 服务 由既不是 Performance Log Users 成员也不是Performance Monitor Users 组,该函数将始终返回 -1,因为用户没有必要的权限(进行系统调用,这是最终完成的)。
关于java - 为什么 getSystemCpuLoad() 返回负值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45795408/