Storm4

 1 package storm.scheduler;
 2 
 3 import java.lang.management.ManagementFactory;
 4 import java.lang.management.ThreadMXBean;
 5 import java.util.HashMap;
 6 import java.util.Map;
 7 import java.util.Set;
 8 
 9 import cpuinfo.CPUInfo;
10 
11 /**
12  * 负载监视器
13  * @author wxweven
14  * @version 1.0
15  * @email wxweven@qq.com
16  * @blog http://wxweven.com
17  * @Copyright: Copyright (c) wxweven 2009 - 2016
18  */
19 public class LoadMonitor {
20 
21     private static final int SECS_TO_NANOSECS = 1000000000;
22     private static LoadMonitor instance = null;
23     private final long cpuSpeed; // Hz
24     Map<Long, Long> loadHistory;
25 
26     public static LoadMonitor getInstance() {
27         if (instance == null) {
28             instance = new LoadMonitor();
29         }
30         return instance;
31     }
32 
33     private LoadMonitor() {
34         cpuSpeed = CPUInfo.getInstance().getCoreInfo(0).getSpeed();
35     }
36 
37     public Map<Long, Long> getLoadInfo(Set<Long> threadIds) {
38         // get current load
39         Map<Long, Long> currentLoadInfo = new HashMap<Long, Long>();
40         ThreadMXBean threadBean = ManagementFactory.getThreadMXBean();
41         for (long id : threadIds) {
42             currentLoadInfo.put(id, threadBean.getThreadCpuTime(id));
43         }
44 
45         // compute difference wrt history
46         Map<Long, Long> loadInfo = new HashMap<Long, Long>();
47         for (long id : threadIds) {
48             // Long oldObj = (loadHistory != null)?loadHistory.get(id):0;
49             // long old = (oldObj != null)?oldObj.longValue():0;
50             long old = 0;
51             if (loadHistory != null && loadHistory.get(id) != null) {
52                 old = loadHistory.get(id);
53             }
54             double deltaTime = (double)(currentLoadInfo.get(id) - old) / SECS_TO_NANOSECS; // sec
55             loadInfo.put(id, (long)(deltaTime * cpuSpeed));
56         }
57 
58         // replace history with current
59         loadHistory = currentLoadInfo;
60 
61         return loadInfo;
62     }
63 }

 

posted @ 2016-05-22 17:16  wxweven  阅读(180)  评论(0编辑  收藏  举报