【问题标题】:unable to acess ProcessCpuTime,SystemCpuLoad methods无法访问 Process Cpu Time,System Cpu Load 方法
【发布时间】:2013-04-03 12:35:48
【问题描述】:

我想在我的 mbean 中收集操作系统参数..以便在注册后我可以在 JConsole 上看到这些值..我收集了一些参数但我无法收集 ProcessCpuTime,SystemCpuLoad 的值 我用 OperatingSystemMXBean 接口对象试过了,但它不起作用。另外我在谷歌上读到,这些方法需要 Windows 不支持的 API。所以有没有另一种方法来数学计算这些值...请帮助我

【问题讨论】:

    标签: jmx mbeans


    【解决方案1】:

    java.lang.management.OperatingSystemMXBean 的 Windows JVM 实现是com.sun.management.OperatingSystem。您可以通过转换前者来直接引用它:

    import java.lang.management.*;
    import com.sun.management.*;
    ...
    OperatingSystem os = (OperatingSystem)ManagementFactory.getOperatingSystemMXBean();
    

    这个类的 Java 6 和 java 7 版本之间存在一些差异,可以通过这个 Groovy 脚本观察到:

    import java.lang.management.*;
    
    os = ManagementFactory.getOperatingSystemMXBean();
    println os.getClass().getName();
    
    try { println "Process CPU Load:${os.getProcessCpuLoad()}"; } catch (e) {}
    try { println "Process CPU Time:${os.getProcessCpuTime()}"; } catch (e) {}
    try { println "System CPU Load:${os.getSystemCpuLoad()}"; } catch (e) {}
    

    Java 6 输出:

    com.sun.management.OperatingSystem

    进程 CPU 时间:79810111600

    Java 7 输出:

    com.sun.management.OperatingSystem

    进程 CPU 负载:-1.0

    进程 CPU 时间:1840811800

    系统 CPU 负载:0.4902940980431365

    所以它不如 Linux [et.al.] 变体有用,但你可能会得到你想要的。

    【讨论】:

      猜你喜欢
      • 2011-11-12
      • 2013-03-23
      • 1970-01-01
      • 1970-01-01
      • 2013-07-16
      • 2022-06-26
      • 1970-01-01
      • 2023-03-28
      相关资源
      最近更新 更多