21

我正在尝试使用 Java 来获取当前运行的 Java 虚拟机使用的 CPU 百分比。我的研究表明我要使用该com.sun.management.OperatingSystemMXBean课程。按照网上的例子,我写了以下内容:

import java.lang.management.ManagementFactory;
import com.sun.management.OperatingSystemMXBean;


public class TestClass {

public static void main (String[] args) {
    OperatingSystemMXBean bean = (com.sun.management.OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();

    System.out.println(bean.getProcessCpuLoad());
    System.out.println(bean.getSystemCpuLoad());

    }

}

在两台机器上测试后,我无法停止获得-1.0两个调用的结果。我尝试通过各种方法使用 64 位和 32 位版本的 Java 7 和 6 运行此代码。-1.0尽管如此,根据 Javadocs ,我得到的只是打印出来的,

All values betweens 0.0 and 1.0 are possible depending of the activities going on in the system. If the system recent cpu usage is not available, the method returns a negative value.

我不知道在这里还能做什么。获得 CPU 负载至关重要,我想避免使用像 Sigar 这样的其他库。有人对此问题有任何建议或有任何见解吗?

4

1 回答 1

42

只是回答我自己的问题,以防它可以帮助别人。

我所做的在技术上是正确的,但是我没有给OperatingSystemMXBean足够的时间来收集 CPU 使用信息。JVM 必须实际运行几秒钟才能收集 CPU 使用信息,然后刷新分辨率似乎取决于实现。

运行具有以下更改的代码将在我的机器上大约 2 秒后开始生成使用信息:

public static void main(String[] args) {
    OperatingSystemMXBean bean = (com.sun.management.OperatingSystemMXBean) ManagementFactory
            .getOperatingSystemMXBean();

    while (true) {
        System.out.println(bean.getProcessCpuLoad());
        System.out.println(bean.getSystemCpuLoad());
    }

}

希望这可以帮助某人

于 2013-12-08T18:21:22.210 回答