编程开发 购物 网址 游戏 小说 歌词 地图 快照 股票 美女 新闻 笑话 | 汉字 软件 日历 阅读 下载 图书馆 开发 租车 短信 China
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
移动开发 架构设计 编程语言 互联网 开发经验 Web前端 开发总结
开发杂谈 系统运维 研发管理 数据库 云 计 算 Java开发
VC(MFC) Delphi VB C++(C语言) C++ Builder 其它开发语言 云计算 Java开发 .Net开发 IOS开发 Android开发 PHP语言 JavaScript
ASP语言 HTML(CSS) HTML5 Apache MSSQL数据库 Oracle数据库 PowerBuilder Informatica 其它数据库 硬件及嵌入式开发 Linux开发资料
  编程开发知识库 -> 编程语言 -> Web应用请求平均时间统计 -> 正文阅读
 

[编程语言]Web应用请求平均时间统计[第1页]

使用Filter统计web应用平均请求时间:
使用两个Map分别存储请求时间和请求次数,当请求来临时,使用请求总时间/请求次数即可获取平均请求时间。

import java.io .IOException;
import java.math.BigDecimal;
import java.util.Date;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicLong;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;

import jxl.common.Logger;

public class RequestCostFilter implements Filter {

	private Logger logger = Logger.getLogger(getClass());

	private static Map<String,AtomicLong> reqTimes = new ConcurrentHashMap<>();

	private static Map<String,BigDecimal> reqAvgTime = new ConcurrentHashMap<>();

	private static ExecutorService executorService = Executors.newFixedThreadPool(20);

	@Override
	public void destroy() {
		// TODO Auto-generated method stub

	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
			throws IOException, ServletException {
		HttpServletRequest httpRequest = (HttpServletRequest) request;
		String url = httpRequest.getServletPath();
		if (checkUrl(url)) {
			Date beginTime = new Date();
			filterChain.doFilter(request, response); // 继续执行
			Date endTime = new Date();
			long i = (long) ((endTime.getTime() - beginTime.getTime()));
			stat(url,i);
		} else {
			filterChain.doFilter(request, response); // 继续执行
		}
	}

	/**
	 * 统计URL的平均请求时间
	 * @param url
	 * @param time
	 */
	private void stat(final String url,final long time){
		executorService.submit(new Runnable(){
			public void run(){
				try {
					if (reqTimes.get(url) == null) {
						reqTimes.put(url, new AtomicLong(1L));
					} else {
						reqTimes.get(url).addAndGet(1L);
					}
					if (reqAvgTime.get(url) == null) {
						reqAvgTime.put(url, new BigDecimal(time));
					} else {
						BigDecimal tt = reqAvgTime.get(url).add(new BigDecimal(time));
						reqAvgTime.put(url, tt);
					}
					BigDecimal avgtime = reqAvgTime.get(url).divide(new BigDecimal(reqTimes.get(url).get()), 2, BigDecimal.ROUND_HALF_EVEN);
					if (avgtime.longValue() > 500) {
						logger.warn(">>>>>>>>>>>|请求平均耗时:" + avgtime + "ms|请求次数:" + reqTimes.get(url).get() + "|URL:" + url + "|");
					}
				}catch (Exception e){
					logger.error("统计URL请求时间出错",e);
				}
			}
		});
	}

	/**
	 * 一级验证
	 */
	private boolean checkUrl(String url) {
		boolean isSucc = true;
		try {
			// 不拦截登录请求
			if ("//login.jsp".equals(url)) {
				return false;
			}
			int pointIndex = url.lastIndexOf(".");
			if (pointIndex > 0) {
				String relUrl = url.substring(pointIndex, url.length());
				if (".css".equals(relUrl)) {
					return false;
				}
				if (".jpg".equals(relUrl)) {
					return false;
				}
				if (".gif".equals(relUrl)) {
					return false;
				}
				if (".png".equals(relUrl)) {
					return false;
				}
				if (".ico".equals(relUrl)) {
					return false;
				}
				if (".js".equals(relUrl)) {
					return false;
				}
				if (".jsp".equals(relUrl)) {
					return false;
				}
			}
		} catch (Exception e) {
			logger.error("系统进行资源一级验证时错误!", e);
		}
		return isSucc;
	}

	@Override
	public void init(FilterConfig arg0) throws ServletException {
		// TODO Auto-generated method stub

	}

}

在web.xml中配置filter:

<!-- 请求耗时过滤器 -->
	<filter>
		<filter-name>requestCostFilter</filter-name>
		<filter-class>org.extremecomponents.table.filter.RequestCostFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>requestCostFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

打印日志如下:

Warning:  >>>>>>>>>>>|请求平均耗时:532.34ms|请求次数:1467|URL:/servlet/UploadServlet|
Warning:  >>>>>>>>>>>|请求平均耗时:949.64ms|请求次数:4407|URL:/leaderApproval!list.action|

  编程语言 最新文章
洛谷P3916 图的遍历_graph
Java_7
C#使用UdpClient发送和接收UDP数据示例 16进
php必会基础
Java判断是否为整数的5种方法
Socket 双向传输问题
腾讯手QQ核心技术-NDK开发语音消息变声功能
遍历枚举接口的元素
多线程-ThreadLocal
翻译 Spring Boot How To
上一篇文章      下一篇文章      查看所有文章
加:2017-09-28 16:11:35  更:2017-09-28 16:13:30 
VC(MFC) Delphi VB C++(C语言) C++ Builder 其它开发语言 云计算 Java开发 .Net开发 IOS开发 Android开发 PHP语言 JavaScript
ASP语言 HTML(CSS) HTML5 Apache MSSQL数据库 Oracle数据库 PowerBuilder Informatica 其它数据库 硬件及嵌入式开发 Linux开发资料
360图书馆 软件开发资料 文字转语音 购物精选 软件下载 美食菜谱 新闻资讯 电影视频 小游戏 Chinese Culture 股票 租车
生肖星座 三丰软件 视频 开发 短信 中国文化 网文精选 搜图网 美图 阅读网 多播 租车 短信 看图 日历 万年历 2018年1日历
2018-1-24 0:09:46
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  编程开发知识库