使用 OperatingSystemMXBean 获取 CPU 使用率

2022-09-02 03:07:13

我正在尝试使用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());

    }

}

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

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这样的库。有人对这个问题有任何建议或见解吗?


答案 1

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

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

在我的计算机上运行具有以下更改的代码将在大约 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());
    }

}

希望这可以帮助某人


答案 2

推荐