如何从java获取OS的CPU使用百分比

时间:2013-08-28 13:25:34

标签: java jmx

我想从java代码计算操作系统CPU使用率的百分比。

  1. 有几种方法可以通过unix命令找到它[例如使用mpstat/proc/stat等...]并使用Runtime.getRuntime().exec
  2. 但我不想使用系统调用。

    我尝试了ManagementFactory.getOperatingSystemMXBean()

    OperatingSystemMXBean osBean =
             (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
    System.out.println(osBean.getSystemLoadAverage());
    

    但是它给出了cpu加载而不是cpu的使用。无论如何都要找到使用百分比?

2 个答案:

答案 0 :(得分:37)

在Java 7中你可以这样得到它:

public static double getProcessCpuLoad() throws Exception {

    MBeanServer mbs    = ManagementFactory.getPlatformMBeanServer();
    ObjectName name    = ObjectName.getInstance("java.lang:type=OperatingSystem");
    AttributeList list = mbs.getAttributes(name, new String[]{ "ProcessCpuLoad" });

    if (list.isEmpty())     return Double.NaN;

    Attribute att = (Attribute)list.get(0);
    Double value  = (Double)att.getValue();

    // usually takes a couple of seconds before we get real values
    if (value == -1.0)      return Double.NaN;
    // returns a percentage value with 1 decimal point precision
    return ((int)(value * 1000) / 10.0);
}

答案 1 :(得分:0)

您可以使用SIGAR API。 它是跨平台的(但我只在Windows上使用它)。

Javadoc可用here,二进制文件为here

根据Apache 2.0许可条款获得许可。