javatest
2016-05-22 17:01
423 查看
package storm.scheduler; import java.lang.management.ManagementFactory; import java.lang.management.ThreadMXBean; import java.util.HashMap; import java.util.Map; import java.util.Set; import cpuinfo.CPUInfo; /** * 负载监视器 * @author wxweven * @version 1.0 * @email wxweven@qq.com * @blog http://wxweven.com * @Copyright: Copyright (c) wxweven 2009 - 2016 */ public class LoadMonitor { private static final int SECS_TO_NANOSECS = 1000000000; private static LoadMonitor instance = null; private final long cpuSpeed; // Hz Map<Long, Long> loadHistory; public static LoadMonitor getInstance() { if (instance == null) { instance = new LoadMonitor(); } return instance; } private LoadMonitor() { cpuSpeed = CPUInfo.getInstance().getCoreInfo(0).getSpeed(); } public Map<Long, Long> getLoadInfo(Set<Long> threadIds) { // get current load Map<Long, Long> currentLoadInfo = new HashMap<Long, Long>(); ThreadMXBean threadBean = ManagementFactory.getThreadMXBean(); for (long id : threadIds) { currentLoadInfo.put(id, threadBean.getThreadCpuTime(id)); } // compute difference wrt history Map<Long, Long> loadInfo = new HashMap<Long, Long>(); for (long id : threadIds) { // Long oldObj = (loadHistory != null)?loadHistory.get(id):0; // long old = (oldObj != null)?oldObj.longValue():0; long old = 0; if (loadHistory != null && loadHistory.get(id) != null) { old = loadHistory.get(id); } double deltaTime = (double)(currentLoadInfo.get(id) - old) / SECS_TO_NANOSECS; // sec loadInfo.put(id, (long)(deltaTime * cpuSpeed)); } // replace history with current loadHistory = currentLoadInfo; return loadInfo; } }
相关文章推荐
- Java动态代理
- Integer源码解析
- 关于hibernate5.1.0中Table 'spring.hibernate_sequence' doesn't exist的解决办法
- 【Spring】【笔记】《Spring In Action》第二章 Bean装配
- Java中定义和声明的区别
- 【深入SpringBoot 1.3.5 第一章】Boot应用的启动流程
- java返回1到54之间不包括某些数的随机数
- Spring xml 配置使用外部config 文件
- struts2中的ModelDriven运行机制
- java jvm-"=="和equal,堆和栈的区别和联系
- Spring.Net学习笔记(八)-设置配置文件参数
- Java中的文件和目录管理(下)----Path、Files
- JAVA之Math类常用数学运算记录
- java学习记录
- 大话设计模式java版--备忘录模式-游戏保存进度例子
- JavaString的一些理解
- java 继承练习题4
- [疯狂Java]基础类库:BigDecimal(精确实数)
- Netbeans opencv 安装
- java 继承练习题3