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请求的原理是 在应用程 ...
随机推荐
- C#动态加载树菜单
在做权限系统的时候,需要有一个树形的菜单.下图就是一个树形菜单的样式 但问题是,我们可以实现写死的树形菜单.什么是写死的?就是在前台代码中写好要加载的树形菜单是什么样子的.但是我们权限系统的要求是动态 ...
- spider autohome (1)
Code: #!/usr/bin/python # -*- coding: UTF-8 -*- import re import urllib import time def getHtml(url) ...
- Javascript提升阶段学习
JavaScript1:javascript简介 JavaScript是一种脚本语言,能实现网页内容的交互显示,当用户在客户端显示该网页时,浏览器就会执行JavaScript程序,用户通过交互的操作来 ...
- Fiddler 修改返回内容 OnBeforeResponse 无效 没用
Fiddler自定义脚本可以实现很强大的内容替换,包括很有意义的——修改返回内容. 具体的方法可以参考官网:http://docs.telerik.com/fiddler/KnowledgeBase/ ...
- Leetcode 231 Power of Two 数论
同样是判断数是否是2的n次幂,同 Power of three class Solution { public: bool isPowerOfTwo(int n) { ) && ((( ...
- 学习Git
参考廖雪峰老师的个人网站:http://www.liaoxuefeng.com 版本库初始化 通过git init命令将这个命令变为git可以管理的仓库 添加文件 用命令git add file告诉G ...
- 纯css制作带三角border篇(兼容所有浏览器)
今天帅哥给你们介绍下,如何用 border 来制作三角. html 代码如下: 复制代码 代码如下: <div class="arrow-up"></div> ...
- 架设证书服务器 及 让IIS启用HTTPS服务(转)
无废话图文教程,教你一步一步搭建CA服务器,以及让IIS启用HTTPS服务. 一.架设证书服务器(CA服务) 1.在系统控制面板中,找到“添加/删除程序”,点击左侧的“添加/删除windows组件”, ...
- 了解 JavaScript (4)– 第一个 Web 应用程序
在下面的例子中,我们将要构建一个 Bingo 卡片游戏,每个示例演示 JavaScript 的不同方面,通过每次的改进将会得到最终有效的 Bingo 卡片. Bingo 卡片的内容 美国 Bingo ...
- YChaos生成混沌图像
YChaos是一款通过数学公式生成混沌图像的软件,展示混沌之美,数学之美.软件中定义一套简易的脚本语言,用于描述数学表达式.使用时需要先要将数学表达式写成该脚本的形式,解析脚本代码以生成相应的图形与图 ...