无法访问Process Cpu Time,System Cpu Load方法

时间:2013-04-03 12:35:48

标签: jmx mbeans

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

1 个答案:

答案 0 :(得分:0)

{J}的Windows JVM实施是java.lang.management.OperatingSystemMXBean。您可以通过强制转换前者直接引用它:

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.]变体那么有用,但你可能会得到你想要的东西。