【问题标题】:How to get percentage of CPU usage of OS from java如何从java获取操作系统的CPU使用百分比
【发布时间】:2013-08-28 13:25:33
【问题描述】:

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

  1. 有几种方法可以通过unix 命令找到它[例如。使用mpstat/proc/stat 等...] 并从Runtime.getRuntime().exec 使用它

但我不想使用系统调用。

我试过ManagementFactory.getOperatingSystemMXBean()

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

但它给 cpu 负载但不给 cpu 使用率。有没有办法查到使用百分比?

【问题讨论】:

  • 您能否为OperatingSystemMXBean 链接到Javadoc?百分比是根据负载计算的,反之亦然?我不知道,但可能是。
  • 没有。负载与百分比无关。 wikijavadoc

标签: java jmx


【解决方案1】:

在 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);
}

【讨论】:

  • 这仅适用于某些操作系统吗?在 64 位 Windows 7 上运行 Java 7u15,返回 NaN,因为 value 是负数。
  • 它应该适用于所有人。我在 Window 7 Java7u51 64bit 上对其进行了测试,几秒钟后它就可以正常工作了。前几秒返回 -1.0,因为初始化一些对象/值需要一些时间。
  • 有趣的是,在我的机器上,CPU 负载似乎需要大约一秒钟才能成为实际值。感谢您的澄清。 +1
  • 我在代码中添加了一条注释,以澄清未来可能不会阅读此处 cmets 的用户。
  • ProcessCpuLoad 是该系统的 JVM 的 CPU 负载百分比。还有 SystemCpuLoad 给出了整个系统的负载。您是否尝试循环调用它?我注意到前几个调用返回 -1.0
【解决方案2】:

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

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

它是根据 Apache 2.0 许可条款获得许可的。

【讨论】:

  • 谢谢!但是在这个 API 的 javadoc 中,我只看到“获取总系统 cpu 时间”而不是 Cpu 类中的用法。你能指导我在哪里可以获得 CPU 使用率吗?
  • 如果您从 SourceForge 下载了 Sigar,您应该在 hyperic-sigar-1.6.4\bindings\java\examples\ 找到几个可用的示例。我认为 CpuInfo.java 或 Top.java 可能是您正在寻找的。​​span>
  • 似乎没有什么比 Ubuntu 9 根据网站获得 SIGAR API 认证更晚的了。这应该是个问题吗?
  • 我们需要考虑到 SIGAR 也会导致 JVM 崩溃。生产环境严格 NO NO。
  • SIGAR 链接已失效。项目也死了吗?或者可能被vmware收购,从第二个链接来看
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-05
  • 2011-04-10
  • 1970-01-01
  • 1970-01-01
  • 2020-04-27
  • 2011-10-10
  • 1970-01-01
相关资源
最近更新 更多