@Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { PerformanceMonitor.begin(target.getClass().getName() + "." + method.getName()); Object obj = method.invoke(target, args); PerformanceMonitor.end(); return obj; }
@SuppressWarnings("deprecation") public void report() { for (PerformanceMonitor m : monitors.values()) { logger.info(m.report()); } logger.info("Manager reported at " + new Date().toLocaleString()); }
public CachingPerformanceMonitor(final PerformanceMonitor performanceMonitor) { cachedSystemResourcesInfo = performanceMonitor.createResourcesInfo(); Thread thread = new Thread() { @Override public void run() { super.run(); try { cachedSystemResourcesInfo = performanceMonitor.createResourcesInfo(); Thread.sleep(500); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } }; thread.setDaemon(true); thread.start(); }
public DataBuffer getServerStatus(int version) { DataBuffer buffer = new DataBuffer(); // system info double cpu = roundToDecimals(cpuMonitor.getCpuUsage() * 100, 2); long freeMem = Runtime.getRuntime().freeMemory(); long maxMem = Runtime.getRuntime().maxMemory(); long totalMem = Runtime.getRuntime().totalMemory(); buffer.writeDouble(cpu); buffer.writeLong(freeMem); buffer.writeLong(maxMem); buffer.writeLong(totalMem); // threads list long totalThreadsCpuTime = 0; long[] threadIds = ManagementFactory.getThreadMXBean().getAllThreadIds(); buffer.writeInt(threadIds.length); // 多少条线程. for (int i = 0; i < threadIds.length; i++) { long id = threadIds[i]; String name = ManagementFactory.getThreadMXBean().getThreadInfo(id).getThreadName(); long cpuTime = 0; if (ManagementFactory.getThreadMXBean().isThreadCpuTimeSupported() && ManagementFactory.getThreadMXBean().isThreadCpuTimeEnabled()) { cpuTime = ManagementFactory.getThreadMXBean().getThreadCpuTime(id); totalThreadsCpuTime += cpuTime; } buffer.writeLong(id); buffer.writeString(name); buffer.writeLong(cpuTime); } buffer.writeLong(totalThreadsCpuTime); return buffer; }
public Dashboard() { // Create CPU monitoring class cpuMonitor = new PerformanceMonitor(); cpuMonitor.getCpuUsage(); // Set baseline }
public void register(PerformanceMonitor m) { monitors.put(m.getName(), m); }