最佳的Servlet分析方法是什么?
特别是我正在寻找一种解决方案,可以显示Servlet内方法调用的执行时间。
我正在Tomcat环境中运行Servlet。
我尝试过VisualVM,但它只允许我查看Tomcat线程的方法调用,而不是Servlet本身。
最佳的Servlet分析方法是什么?
特别是我正在寻找一种解决方案,可以显示Servlet内方法调用的执行时间。
我正在Tomcat环境中运行Servlet。
我尝试过VisualVM,但它只允许我查看Tomcat线程的方法调用,而不是Servlet本身。
public class ProfilingFilter implements Filter {
public void init(FilterConfig fc){}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain){
long startTime = System.currentTimeInMillis();
String servletName = ((HttpServletRequest) req)..getPathInfo();
chain.doFilter(req, resp);
long executionTime = System.currentTimeInMillis()-startTime;
// Implement the following to store or handle the data.
logData(servletName, executionTime);
}
}
<filter>
<filter-name>profilingFilter</filter-name>
<filter-class>com.awesome.ProfilingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>profilingFilter</filter-name>
<url-pattern>*</url-pattern>
</filter-mapping>
2015年。自从JDK 7u60(如果我没记错的话)以来,jvm就有了一个内置工具来分析Java应用程序。据说它非常轻量级,只占用约1%的CPU资源。它被称为Java Flight Recorder。要启用它,您需要使用7u60以上版本的jdk,并使用以下标志启动您的应用程序。
-XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:StartFlightRecording=duration=60s,filename=myrecording.jfr
duration=60s
设置了分析的持续时间(根据需要进行设置),filename=myrecording.jfr
则设置了保存分析信息的文件名。