繁体   English   中英

JBoss 7使用的CPU百分比

[英]CPU percentage using by JBoss 7

我想监视““ Jboss 7 as”“ CPU使用率,我可以使用JMX来做到这一点吗? 编写此函数时,我得到的是CPU时间,而不是CPU百分比...

public String getCpuUsage(){
    try {
        Method m=op.getClass().getDeclaredMethod("getProcessCpuTime");
        m.setAccessible(true);
        Object value=null;
        value=m.invoke(op);
        return value+"";
    } catch (SecurityException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (NoSuchMethodException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalArgumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return null;
}

如何计算JBoss CPU百分比?

进程的cpu时间是自进程启动以来所使用的CPU的总纳秒数。 因此,要获取百分比,您将需要2条其他信息:

  1. CPU数。 可从OperatingSystemMXBean.getAvailableProcessors()Runtime.availableProcessors()获得此功能
  2. 在进程cpu时间累积的时间内已经过的相应挂钟时间,最好使用System.nanoTime()完成,因为它提供与进程cpu时间相同的“单位”。

实施上面的#2的最佳方法是定期对进程cpu时间进行轮询,并且在第一次轮询之后,经过的挂钟时间将是当前的System.nanoTime()减去先前轮询中收集到的时间。期。

现在,您有了:

  • 挂钟经过的时间(该时间段的时间减去最后一个时间段的时间)称为X
  • 所经过的进程cpu时间(此时间段的时间减去上一时间段的时间)称为Y
  • CPU数。 叫这个C

利用率百分比为Y /(X x C)* 100

这是一个快速而肮脏的常规脚本,它演示了这一点:

import java.lang.management.*;
import java.util.concurrent.*;

osx = ManagementFactory.getOperatingSystemMXBean();
cores = osx.getAvailableProcessors();

// Factorial to keep the process busy so we can see some actual activity
factorial = { n ->
    int fact = 1;
    int i = 1;
    while(i <= n) {
        i++;
        fact *= i;
    }
    return fact;
}


long elapsedTime = -1, startTime = -1;
long elapsedCpu = -1, startCpu = -1;;

for(i in 0..20) {
    startTime = System.nanoTime();
    startCpu = osx.getProcessCpuTime();
    CountDownLatch latch = new CountDownLatch(cores);
    for(x in 1..cores) {
        Thread.startDaemon() {
            factorial(1000000);
            latch.countDown();
        }
    }
    latch.await();
    elapsedTime = System.nanoTime()-startTime;
    elapsedCpu = osx.getProcessCpuTime()-startCpu;
    percUsage = (elapsedCpu / (elapsedTime* cores)) *100;
    println "Percent Usage:$percUsage %";
}

输出:

Percent Usage:51.5167066100 %
Percent Usage:53.5206121100 %
Percent Usage:55.3874037900 %
Percent Usage:59.8187255600 %
Percent Usage:60.0488511300 %
Percent Usage:68.3172332900 %
Percent Usage:45.0529180000 %
Percent Usage:58.3662459200 %
Percent Usage:62.6933609700 %
Percent Usage:60.1530673000 %
Percent Usage:69.0448532600 %
Percent Usage:52.0072152200 %
Percent Usage:57.1837311400 %
Percent Usage:65.8311579500 %
Percent Usage:66.3076807600 %
Percent Usage:69.8803721800 %
Percent Usage:28.5111361300 %
Percent Usage:40.1093035100 %
Percent Usage:60.9499459700 %
Percent Usage:68.7113809300 %
Percent Usage:71.8252480400 %

您可能应该比我做的更好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM