怎么获取jvm的cpu占用率

怎么获取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不会是相同的值的。