使用OperatingSystemMXBean获取CPU使用率

我正在尝试使用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两个调用的结果。我尝试通过各种方法使用Java

7和6的64位和32位版本运行此代码。不过,我得到的是打印出的-1.0该,根据的Javadoc,

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

回答:

只是回答我自己的问题,以防有人帮忙。

从技术上讲,我所做的工作是正确的,但是我没有给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());

}

}

希望这可以帮助某人

以上是 使用OperatingSystemMXBean获取CPU使用率 的全部内容, 来源链接: utcz.com/qa/429818.html

回到顶部