java - 为什么 getSystemCpuLoad() 返回负值

标签 java memory cpu-usage

我需要使用 Java 获取CPU 使用情况内存使用情况。找到了 com.sun.management.OperatingSystemMXBeangetSystemCpuLoad() .根据文档,它返回一个介于 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/

相关文章:

c++ - 如何以编程方式从工作线程获取父线程和兄弟线程的 CPU 利用率?

python - 如何分析 Python 脚本的 CPU 使用率?

用于 HashMap 的 Java 8 流

c - 用C在内存中查找程序代码

Swift iOS - 类对象类型是否比 "Primitive"类型消耗更多内存?

azure - ASP.NET Core 2.2 遇到高 CPU 使用率

java - 在 RStudio 中使用 iplots 库运行代码失败

java - 方法解释

java - 随机访问大量对象(如哈希表)的建议

c++ - allocate_shared 与 malloc