進行Servlet概要分析的最佳方法是什麼?Servlet概要分析
特別是我正在尋找一個解決方案,可以顯示servlet中方法調用的執行時間。
我在Tomcat環境中運行Servlet。
我已經嘗試過VisualVM,但它只允許我從Tomcat線程而不是Servlet本身查看方法調用。
進行Servlet概要分析的最佳方法是什麼?Servlet概要分析
特別是我正在尋找一個解決方案,可以顯示servlet中方法調用的執行時間。
我在Tomcat環境中運行Servlet。
我已經嘗試過VisualVM,但它只允許我從Tomcat線程而不是Servlet本身查看方法調用。
我使用JProfiler進行分析,它們支持許多不同的服務器,並提供非常好的控制和良好的報告。但是它是一個商業應用程序,雖然你可以得到一個評估版本。你也可以看看open source profilers,雖然我沒有使用過這些,也不能說它們有多好或壞。
編輯 我假定您瞭解如何剖析作品,剖析會做一些儀器和附加代理的JVM,這一切都影響性能。所以永遠不要在生產環境中使用它。
手動解決這個問題的方法可能是爲有問題的servlet創建一個過濾器,然後可以測量完成所有執行並將它們存儲在某處的時間。 這很好,因爲分析調用的開銷與您在過濾器中編寫的代碼一樣多,我還發現找到需要更長時間才能完全加載的頁面和servlet非常有用。
這是過濾器是如何工作的
這樣做創建一個實現了javax.servlet.Filter接口的類。
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);
}
}
現在把它添加到你的web.xml
最後的映射:
<filter-mapping>
<filter-name>profilingFilter</filter-name>
<url-pattern>*</url-pattern>
</filter-mapping>
注意,這將會過濾一切,所以你會簡介,HTML,JSP, servlets,圖像,還有什麼不是。
我們發現這非常有用,可以發現應用程序中確切需要花費太多時間來響應或者非常沉重。
您甚至可以在生產中使用此功能以獲取真實數據,性能上的突破將與您的代碼保存分析數據一樣大。
一些想法:存儲您的統計地圖的servlet上下文裏面,然後讓另一個servlet顯示這些統計數據。這樣你甚至不需要訪問磁盤。
2015. 由於JDK 7u60(如果我知道了)jvm有一個內置工具來分析java應用程序。據說它非常輕便~1%的CPU消耗。 它被稱爲Java飛行記錄器。 要啓用它,您需要7u60的jdk版本,並使用以下標誌啓動您的應用程序。
-XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:StartFlightRecording=duration=60s,filename=myrecording.jfr
這裏duration=60s
將分析的時間(設定爲多,因爲你需要),並filename=myrecording.jfr
設置到分析信息將被保存的文件。
然後你可以使用java任務控制來查看文件。
LambdaProbe很容易集成到Tomcat。它顯示了servlet執行次數,最小/最大時間以及內存中的會話屬性和大小。 但它不會做你想看到的個別方法調用。 JProbe和JProfiler都很有用 - 兩者都是商業產品 – JoseK 2010-03-12 06:47:53