Chinaunix首页 | 论坛 | 博客
  • 博客访问: 10222407
  • 博文数量: 1669
  • 博客积分: 16831
  • 博客等级: 上将
  • 技术积分: 12594
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-25 07:23
个人简介

柔中带刚,刚中带柔,淫荡中富含柔和,刚猛中荡漾风骚,无坚不摧,无孔不入!

文章分类

全部博文(1669)

文章存档

2023年(4)

2022年(1)

2021年(10)

2020年(24)

2019年(4)

2018年(19)

2017年(66)

2016年(60)

2015年(49)

2014年(201)

2013年(221)

2012年(638)

2011年(372)

分类: 系统运维

2012-11-05 11:26:26

使用Filter统计Java(J2EE)的web程序http请求响应时间  

2012-11-04 20:55:49|  分类: rhel_监控 |  标签: |字号 

在网站性能的相关工作中,一个重要的方面是有一定的监控和日志统计,然后对这些数据进行分

析,知道什么时候慢了,慢在哪里,然后才可以进行有针对性的性能优化工作;

这里,80/20准则是非常适用的,我所见过的大部分情况都是约80%页面都是没问题的,但是有约20%的

页面的性能较差;

监控http请求的处理时间的方法有很多,这里介绍一种java(j2ee)的web程序中监控/统计http请求处

理时间的简便方法:就是利用Filter来统计所有请求的处理时间;

Filter是j2ee的一种过滤器模式,可以在一个filterchain上挂很多个不同的filter,做各种的处理,

比如安全、编码等;filter可以指定对应到哪些url,如果指定url-pattern为/*,那么就可以做对所有

请求的统计

添加一个Filter名为PerfFilter, 在web.xml添加如下代码

[xhtml] view plaincopy
  1. <filter>  
  2.   
  3. <display-name>PerfFilterdisplay-name>  
  4.   
  5. <filter-name>PerfFilterfilter-name>  
  6.   
  7. <filter-class>PerfFilterfilter-class>  
  8.   
  9. filter>  
  10.   
  11. <filter-mapping>  
  12.   
  13. <filter-name>PerfFilterfilter-name>  
  14.   
  15. <url-pattern>/*url-pattern>  
  16.   
  17. filter-mapping>  

 

然后在PerfFilter中有如下代码

  1. public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)   
  2.   
  3. throws IOException, ServletException {  
  4.   
  5. HttpServletRequest req = (HttpServletRequest)request;  
  6.   
  7. long t1 = System.currentTimeMillis();  
  8.   
  9. chain.doFilter(request, response);  
  10.   
  11. long t2 = System.currentTimeMillis();  
  12.   
  13. System.out.println(“***request (” + req.getRequestURI() + “) finished with time(ms):   
  14.   
  15. ” + (t2-t1) );  
  16.   
  17. }  

这时候,所有的http请求,无论是servlet,jsp还是其他各种框架的实现,比如struts,springmvc,jsf

等,都可以被这个Filter统计到,可以方便后续的日志分析工作[实际中通常将System.out换成相关的

logger],找到较慢的请求,然后重点该进。

例如,本地访问servlet和jsp,就会在控制台看到如下输出;

***request (/webtest/TestServlet) finished with time(ms): 5000

***request (/webtest/jsp1.jsp) finished with time(ms): 3000

有必要的话,还可以将请求相关的参数打印出来,因为实际工作中,不少请求的响应时间是和参数密

切相关的;

这种做法的好处是有一个单独、统一的性能日志,系统以后添加任何servlet/jsp或者切换框架,都不

需要任何改动;

阅读(1153) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~