Java 如何在套接字级别拦截Tomcat请求?

Java 如何在套接字级别拦截Tomcat请求?,java,performance,apache,tomcat,tomcat6,Java,Performance,Apache,Tomcat,Tomcat6,我正在为运行在ApacheTomcat6上的web应用程序框架进行性能研究 我试图测量处理HTTP请求的时间开销 我想做的是: / / 然后我会计算总时间(t2-t1) 有办法做到这一点吗?谢谢你的帮助 一种完全不需要任何编码的替代方法是使用类似的工具查看网络流量。我认为您可以通过添加一个并在调用doFilter之前和之后将计时代码放在过滤器链的其余部分来实现这一点。跟踪这一点的最佳方法可能是使用一个 但如果Tomcat导出的MBean中没有跟踪到这一点,我会感到惊讶。特别是,MBeanCata

我正在为运行在ApacheTomcat6上的web应用程序框架进行性能研究

我试图测量处理HTTP请求的时间开销

我想做的是:

/

/

然后我会计算总时间(t2-t1)


有办法做到这一点吗?谢谢你的帮助

一种完全不需要任何编码的替代方法是使用类似的工具查看网络流量。

我认为您可以通过添加一个并在调用doFilter之前和之后将计时代码放在过滤器链的其余部分来实现这一点。

跟踪这一点的最佳方法可能是使用一个

但如果Tomcat导出的MBean中没有跟踪到这一点,我会感到惊讶。特别是,MBean
Catalina:name=http-,type=GlobalRequestProcessor
列出了以下属性:

bytesSent=51829989
bytesReceived=0
processingTime=11464
errorCount=8
最大时间=1250
requestCount=923
modelerType=org.apache.coyote.RequestGroupInfo


查看上的文档,了解如何使用JMX访问这些MBean。

AspectJ解决方案。使用它,您可以对应用程序CL(而不是引导程序CL)加载的类执行任何操作。

感谢您的帮助,但筛选器仅在HTTP请求处理后调用。这是可能的,但很难将请求与处理请求的服务器线程相关联。我打算测试同步请求。阀门与过滤器有类似的问题。它仅在解析HTTP请求后调用。我将研究JMX选项。谢谢我认为这不是真的。查看javadoc,一些阀执行预处理工作,然后调用管道中的下一个阀,然后执行后处理工作(例如RequestDumperValve和ReplicationValve)。当您调用下一个阀时,控制在该阀(以及它调用的所有阀)返回后返回给您。您可以对过滤器执行相同的操作。
// just before first request byte is read
long t1 = System.nanoTime();

// request is processed...

// just after final byte is written to response
long t2 = System.nanoTime();