java 监控cpu,在java中监控每个线程的cpu使用情况?

I would like to ask whether there is some simple way to determine cpu usage per thread in java. Thanks

解决方案

I believe the JConsole (archived link) does provide this kind of information through a plugin

IUvk6.jpg

It uses ThreadMXBean getThreadCpuTime() function.

Something along the line of:

long upTime = runtimeProxy.getUptime();

List threadCpuTime = new ArrayList();

for (int i = 0; i < threadIds.size(); i++) {

long threadId = threadIds.get(i);

if (threadId != -1) {

threadCpuTime.add(threadProxy.getThreadCpuTime(threadId));

} else {

threadCpuTime.add(0L);

}

}

int nCPUs = osProxy.getAvailableProcessors();

List cpuUsageList = new ArrayList();

if (prevUpTime > 0L && upTime > prevUpTime) {

// elapsedTime is in ms

long elapsedTime = upTime - prevUpTime;

for (int i = 0; i < threadIds.size(); i++) {

// elapsedCpu is in ns

long elapsedCpu = threadCpuTime.get(i) - prevThreadCpuTime.get(i);

// cpuUsage could go higher than 100% because elapsedTime

// and elapsedCpu are not fetched simultaneously. Limit to

// 99% to avoid Chart showing a scale from 0% to 200%.

float cpuUsage = Math.min(99F, elapsedCpu / (elapsedTime * 1000000F * nCPUs));

cpuUsageList.add(cpuUsage);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值