使用OperatingSystemMXBean获取CPU使用率

Kon*_*Kon 13 java 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());

    }

}
Run Code Online (Sandbox Code Playgroud)

在两台机器上测试后,我无法停止获得-1.0两个调用的结果.我尝试通过各种方法使用64位和32位版本的Java 7和6来运行此代码.不过,我得到的是打印出的-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这样的其他库.有人对此问题有任何建议或有任何见解吗?

Kon*_*Kon 33

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

我在做什么在技术上是正确的,但是我没有给它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());
    }

}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助某人

  • @Shashank此代码仅用于演示获取CPU使用信息的滞后期.在实际系统中,您不应该在无限循环中进行此调用.在应用程序运行一段时间后,每个用例只需一次就足够了. (4认同)
  • 你让我的一天@shashank :) (4认同)
  • 完整工作的示例,以防有人感兴趣:https://github.com/luciopaiva/java-simple-system-info (2认同)