怎么获取jvm的cpu占用率
[quote]我明白你的意思,我是前后取了两次,中间隔了1分钟 [/quote]
怎么会一样呢?
[code="java"]
Thread thread = new Thread(new Runnable()
{
@Override
public void run()
{
while (true)
{
}
}
});
long result = 0l;
long result2 = 0l;
OperatingSystemMXBean osMXBean = ManagementFactory
.getOperatingSystemMXBean();
if (osMXBean instanceof com.sun.management.OperatingSystemMXBean)
{
com.sun.management.OperatingSystemMXBean sunOSMXBean = (com.sun.management.OperatingSystemMXBean) osMXBean;
result = sunOSMXBean.getProcessCpuTime();
}
thread.start();
Thread.sleep(5000);
OperatingSystemMXBean osMXBean2 = ManagementFactory
.getOperatingSystemMXBean();
if (osMXBean2 instanceof com.sun.management.OperatingSystemMXBean)
{
com.sun.management.OperatingSystemMXBean sunOSMXBean2 = (com.sun.management.OperatingSystemMXBean) osMXBean2;
result2 = sunOSMXBean2.getProcessCpuTime();
}
System.out.println(result + " " + result2);
[/code]
这个只能通过shell脚本或者其他代码获取吧。
java代码的话
要么就用Runtime.exec来执行shell获取。
要么就用ScriptEngine执行其他动态脚本。
不通过脚本的话只能获取计算cpu使用率,不能获取占用多少了cpu。
ManagementFactory.getThreadMXBean()获取线程统计类
然后分别统计当前进程中所有线程的cpu使用情况,做出统计。
[quote]在网上google下,说是可以通过RuntimeMXBean.getUptime()和OperatingSystemMXBean. getProcessCpuTime()来计算JVM占用的系统CPU比例的情况,怎么算呢? [/quote]
一段时间内分别获取两次,然后相减,再比一下,统计一段时间内两者的比值:
OperatingSystemMXBean. getProcessCpuTime()-OperatingSystemMXBean. getProcessCpuTime()/RuntimeMXBean.getUptime()-RuntimeMXBean.getUptime()
OperatingSystemMXBean这个类必须引入rt.jar
[quote]这个OperatingSystemMXBean. getProcessCpuTime前后取的都是一样的值哦 [/quote]
。。。。。。
不是前面说了么 过一段时间取一次,然后计算。前后相减,上面是示例伪代码,这还不知道怎么写么。
A-B/C-D AB都是用一种方法和方式获取时间,但是A B不会是相同的值的。