Java 监控请求
监控对象
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<Long, Integer> 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<Long, Integer> data = new HashMap<>(record);
record.clear();
for (Entry<Long, Integer> 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();
}
}
}
Java 监控请求的更多相关文章
- Java 监控直播流rtsp协议转rtmp、hls、httpflv协议返回浏览器
Java 监控直播流rtsp协议转rtmp.hls.httpflv协议返回浏览器 目录 需求背景: 一:了解音视频流协议: 二:方案一 rtsp 转rtmp 1.下载nginx + nginx-rtm ...
- Java HTTP请求
注意:java http请求要放在 try catch里面,该过程是一个阻塞过程,所以需要新建一个线程进行处理 try { HttpPost request = new HttpPost(URL); ...
- java监控函数执行时间
java监控函数执行时间 http://blog.csdn.net/ycg01/article/details/1467542 java监控函数执行时间 标签: javathreadclassstri ...
- java读取请求中body数据
java读取请求中body数据 /** * 获取request中body数据 * * @author lifq * * 2017年2月24日 下午2:29:06 * @throws IOExcepti ...
- JAVA之旅(三十二)——JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用
JAVA之旅(三十二)--JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用 GUI写到一半电脑系统挂了,也就算了,最多GUI还有一个提示框和实例, ...
- MinerMonitorThread.java 监控线程
MinerMonitorThread.java 监控线程 package com.iteye.injavawetrust.miner; import org.apache.commons.loggin ...
- Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,java 判断请求是不是ajax请求
Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,java 判断请求是不是ajax请求 Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求 java ...
- fidder监控请求响应时间和请求IP(摘抄至网络)
增加监控请求的详情时间 在CustomRules.js的class Handlers中增加 //添加请求的响应时间 public static BindUIColumn("Time Tak ...
- 解决Fiddler不能监听Java HttpURLConnection请求的方法
在默认情况下,Fiddler不能监听Java HttpURLConnection请求.究其原因,Java的网络通信协议栈可能浏览器的通信协议栈略有区别,Fiddler监听Http请求的原理是 在应用程 ...
随机推荐
- 如何在ASP.NET中用C#将XML转换成JSON
本文旨在介绍如果通过C#将获取到的XML文档转换成对应的JSON格式字符串,然后将其输出到页面前端,以供JavaScript代码解析使用.或许你可以直接利用JavaScript代码通过Ajax的方式来 ...
- ConcurrentHashMap--锁的分段技术
ConcurrentHashMap是Java 5中支持高并发.高吞吐量的线程安全HashMap实现. HashTable容器在竞争激烈的并发环境下表现出效率低下的原因,是因为所有访问HashTable ...
- 我的fckeditor实践
一开始我不懂这个ConnectorServlet是何用处,后来发现是专门用于文件上传的,因为fckeditor默认是不支持这个功能的. ConnectorServlet: /* * FCKeditor ...
- 常用dom对象
DOM:文档对象模型 --树模型 文档:标签文档,对象:文档中每个元素对象,模型:抽象化的东西 一:window: window.shuxing; 属性(值或者子对象): opener:打开当前窗口的 ...
- Js中的一个日期处理格式化函数
由于在工作中,经常需要对日期进行格式化,不像后端那样,有方便的方法可调用,可以在date的对象prototype中定义一个format方法,见如下 //日期时间原型增加格式化方法 Date.proto ...
- Atitit.java expression fsm 表达式分词fsm引擎
Atitit.java expression fsm 表达式分词fsm引擎 C:\0workspace\AtiPlatf_cms\src\com\attilax\fsm\JavaExpFsm.java ...
- Atitit. js mvc 总结(2)----angular 跟 Knockout o99 最佳实践
Atitit. js mvc 总结(2)----angular 跟 Knockout o99 最佳实践 1. 框架 angular 跟Knockout 1 2. 2. 简单的列表绑定:Knockou ...
- Atitit.列表页面and条件查询的实现最佳实践(1)------设置查询条件and提交查询and返回json数据
Atitit.列表页面and条件查询的实现最佳实践(1)------设置查询条件and提交查询and返回json数据 1. 1. 配置条件字段@Conditional 1 1 2. 2. 配置条件字段 ...
- Solr调研总结
http://wiki.apache.org/solr/ Solr调研总结 开发类型 全文检索相关开发 Solr版本 4.2 文件内容 本文介绍solr的功能使用及相关注意事项;主要包括以下内容:环境 ...
- 解决.Net 4.0 A potentially dangerous Request.Form value was detected from the client 异常
在web.config中加入 <httpRuntime maxRequestLength="22000" executionTimeout="43200" ...