博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 监控请求
阅读量:5323 次
发布时间:2019-06-14

本文共 2789 字,大约阅读时间需要 9 分钟。

监控对象

import java.util.Date;import java.util.HashMap;import java.util.Map;import java.util.Map.Entry;import java.util.concurrent.ConcurrentHashMap;/** * 监控对象 *  * @author solq * */public class Monitor {        /** 每分钟记录 */    private ConcurrentHashMap
record = new ConcurrentHashMap<>(); /** 记录间隔 */ private long recordInterval; /** 清理间隔 */ private long cleanInterval; /** 记录名称 */ private String name; /** 最后清理时间 */ private long lastClean = System.currentTimeMillis(); public static Monitor valueOf(String name, long recordInterval, long cleanInterval) { Monitor result = new Monitor(); result.name = name; result.recordInterval = recordInterval; result.cleanInterval = cleanInterval; return result; } public void record() { final long start = System.currentTimeMillis(); // 去掉除数 达到取上一时间点效果 final long key = (start / recordInterval) * recordInterval; if (Math.abs((start- lastClean)) > cleanInterval) { synchronized (this) { if (Math.abs((start- lastClean))> cleanInterval) { printlnAndClean(); } } } record(key); } void record(Long key) { while (true) { Integer value = record.get(key); if (value == null) { if (record.putIfAbsent(key, 1) == null) { break; } } else { if (record.replace(key, value, value + 1)) { break; } } } } /** * 打印并清理记录 * */ private void printlnAndClean() { lastClean = System.currentTimeMillis(); Map
data = new HashMap<>(record); record.clear(); for (Entry
entry : data.entrySet()) { System.err.println(name + " Monitor : " + DateUtils.date2String(new Date(entry.getKey()), DateUtils.PATTERN_DATE_TIME) + " : " + entry.getValue()); } }}

监控使用包装

/** * 请求监控工具 *  * @author solq * */public abstract class RequestMonitorUtil {    private static Monitor commandMonitor = Monitor.valueOf("命令代理", 60 * 1000,            60 * 60 * 1000);    private static Monitor sqlMonitor = Monitor.valueOf("sql代理", 60 * 1000,            60 * 60 * 1000);    public static void recordSql() {        try {            commandMonitor.record();        } catch (Exception e) {            e.printStackTrace();        }    }    public static void recordCommand() {        try {            sqlMonitor.record();        } catch (Exception e) {            e.printStackTrace();        }           }}

转载于:https://www.cnblogs.com/solq/p/4686270.html

你可能感兴趣的文章
posix多线程有感--线程高级编程(线程属性函数总结)(代码)
查看>>
spring-使用MyEcilpse创建demo
查看>>
DCDC(4.5V to 23V -3.3V)
查看>>
kettle导数到user_用于left join_20160928
查看>>
activity 保存数据
查看>>
typescript深copy和浅copy
查看>>
linux下的静态库与动态库详解
查看>>
hbuilder调底层运用,多张图片上传
查看>>
深入理解基于selenium的二次开发
查看>>
较快的maven的settings.xml文件
查看>>
Git之初体验 持续更新
查看>>
Exception in thread "AWT-EventQueue-0" java.lang.IllegalThreadStateException
查看>>
随手练——HDU 5015 矩阵快速幂
查看>>
启动redis一闪就关
查看>>
Maven之setting.xml配置文件详解
查看>>
ASP.NET 4.5 Web Forms and Visual Studio vs2013年入门1
查看>>
SDK目录结构
查看>>
malloc() & free()
查看>>
HDU 2063 过山车
查看>>
高精度1--加法
查看>>