【发布时间】:2013-04-03 12:35:48
【问题描述】:
我想在我的 mbean 中收集操作系统参数..以便在注册后我可以在 JConsole 上看到这些值..我收集了一些参数但我无法收集 ProcessCpuTime,SystemCpuLoad 的值 我用 OperatingSystemMXBean 接口对象试过了,但它不起作用。另外我在谷歌上读到,这些方法需要 Windows 不支持的 API。所以有没有另一种方法来数学计算这些值...请帮助我
【问题讨论】:
我想在我的 mbean 中收集操作系统参数..以便在注册后我可以在 JConsole 上看到这些值..我收集了一些参数但我无法收集 ProcessCpuTime,SystemCpuLoad 的值 我用 OperatingSystemMXBean 接口对象试过了,但它不起作用。另外我在谷歌上读到,这些方法需要 Windows 不支持的 API。所以有没有另一种方法来数学计算这些值...请帮助我
【问题讨论】:
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.] 变体有用,但你可能会得到你想要的。
【讨论】: