使用Filter统计Java(J2EE)的web程序http请求响应时间
2010-09-21 17:31
911 查看
在网站性能的相关工作中,一个重要的方面是有一定的监控和日志统计,然后对这些数据进行分
析,知道什么时候慢了,慢在哪里,然后才可以进行有针对性的性能优化工作;
这里,80/20准则是非常适用的,我所见过的大部分情况都是约80%页面都是没问题的,但是有约20%的
页面的性能较差;
监控http请求的处理时间的方法有很多,这里介绍一种java(j2ee)的web程序中监控/统计http请求处
理时间的简便方法:就是利用Filter来统计所有请求的处理时间;
Filter是j2ee的一种过滤器模式,可以在一个filterchain上挂很多个不同的filter,做各种的处理,
比如安全、编码等;filter可以指定对应到哪些url,如果指定url-pattern为/*,那么就可以做对所有
请求的统计
添加一个Filter名为PerfFilter, 在web.xml添加如下代码
然后在PerfFilter中有如下代码
这时候,所有的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或者切换框架,都不
需要任何改动;
析,知道什么时候慢了,慢在哪里,然后才可以进行有针对性的性能优化工作;
这里,80/20准则是非常适用的,我所见过的大部分情况都是约80%页面都是没问题的,但是有约20%的
页面的性能较差;
监控http请求的处理时间的方法有很多,这里介绍一种java(j2ee)的web程序中监控/统计http请求处
理时间的简便方法:就是利用Filter来统计所有请求的处理时间;
Filter是j2ee的一种过滤器模式,可以在一个filterchain上挂很多个不同的filter,做各种的处理,
比如安全、编码等;filter可以指定对应到哪些url,如果指定url-pattern为/*,那么就可以做对所有
请求的统计
添加一个Filter名为PerfFilter, 在web.xml添加如下代码
<filter> <display-name>PerfFilter</display-name> <filter-name>PerfFilter</filter-name> <filter-class>PerfFilter</filter-class> </filter> <filter-mapping> <filter-name>PerfFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
然后在PerfFilter中有如下代码
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest)request; long t1 = System.currentTimeMillis(); chain.doFilter(request, response); long t2 = System.currentTimeMillis(); System.out.println(“***request (” + req.getRequestURI() + “) finished with time(ms): ” + (t2-t1) ); }
这时候,所有的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或者切换框架,都不
需要任何改动;
相关文章推荐
- 使用Filter统计Java(J2EE)的web程序http请求响应时间
- java 使用拦截器统计每个http请求的响应时间
- 使用HttpWebRequest和HttpWebResponse在后台进行文件的请求和响应
- 通过URL,使用HttpURLConnection进行请求/响应,访问web服务器图片等资源。异常报错
- 使用java程序模拟页面发送http的post请求
- JavaWeb使用Filter、动态代理对客户端请求服务端参数中文乱码解决
- 使用JAVA发送HTTP请求(Http Request),返回HTTP响应(Http Response)内容,代码程序例子及原理说明
- 使用java程序模拟页面发送http的post请求
- 使用java程序模拟页面发送http的post请求
- JavaWeb Filter 过滤器的机制 与使用 请求重定向与请求转发的区别 跳转过滤,过滤器dispatcher REQUEST与FORWARD区别
- 使用java程序模拟页面发送http的post请求
- java web 学习笔记四 使用ajax响应异步请求
- 使用java的自定义过滤器Filter 处理请求request 并响应response
- j2ee的web项目,在浏览器中发起一个该项目中html页面的绝对地址,也是发起的一个http url请求,请求的响应报文的结果就是该html页面的所有html代码
- 接收对 http://192.168.1.18:8001/ObtainData/Service 的 HTTP 响应时发生错误。这可能是由于服务终结点绑定未使用 HTTP 协议造成的。这还可能是由于服务器中止了 HTTP 请求上下文(可能由于服务关闭)所致。
- IIS网站已经停止,提示服务器没有及时响应启动或控制请求!本地计算机法启动 World Wide Web Publishing 服务。提示 “错误127: 找不到指定的程序”或者“错误1721,资源不足,无法启动
- 使用Fiddler监听Java HttpURLConnection请求的小技巧
- java 在Jetty9中使用HttpSessionListener和Filter
- 如何使用 HTTP 响应头字段来提高 Web 安全性?
- java使用Post和Get方式提交Http请求通用