最近一些朋友談到了系統效能分析的問題。想分析一個基於Java的系統為什麼會慢最好的方法就是使用Profiler.
profiler的原理是通過一些驅動和jvm綁定來讀取jvm的運行時的情況,得到從類的載入到執行到結束整個過程中時間情況,從而知道到底那些函數的那些方法讓你的系統變的很慢。
比較好的開源Profiler工具有Extensible Java Profiler和Eclipse Profiler Plugin
1 Extensible Java Profiler一般用來測試傳統型應用程式。
使用以下的方法來運行一個程式
run-enabled application-main-class
java –Xruntracer application-main-class
程式結束以後會產生一個tracer-output.bin.gz
然後使用EJP Presenter開啟這個產生的檔案。通過選擇自己感興趣的類,就可以查看到執行過程中各個方法的調用時間了。
2 Eclipse Profiler Plugin通常用於測試WebApplication
以tomcat為例,在catalina.bat中加入以下配置
set _EXECJAVA=%_RUNJAVA%
set MAINCLASS=org.apache.catalina.startup.Bootstrap
set ACTION=start
set SECURITY_POLICY_FILE=
set DEBUG_OPTS=
set JPDA=
following line:
set JAVA_OPTS=-XrunProfilerDLL:1 -Xbootclasspath/a:jakarta-regexp.jar;profiler_trace.jar;commons-lang.jar -D__PROFILER_PACKAGE_FILTER=__A__%MAINCLASS%;__M__sun.;__M__com.sun.;__M__java.;__M__javax.;__M__org.apache. -D__PROFILER_TIMING_METHOD=1
來綁定jvm,這裡的__A__表示啟動類 __M__表示不監視的類
然後進入eclipse,在run面板的profiler裡面設定要要監視的類,然後啟動tomcat,啟動並執行結果可以在下面的面板中看到。包括執行時間,調用率等等。
當遇到效能瓶頸的時候,不妨自己動手測試一下,說不定能發現不少問題。對代碼的重構能產生協助
補充幾點
1 Extensible Java Profiler的Presenter運行時候如果報錯:class版本是4.9,應該是4.8,這是因為jdk1.5編譯的class是4.9版本,而jdk1.4是4.8,所以你可以再裝一個1.5的jdk,設定jre路徑來運行
2 啟動並執行時候速度會變慢這是正常的。所以看結果的時候不能光看執行的時間,而要看百分比
3 產生的ejp檔案會很大,運行後可以及時清除
4 Eclipse Profiler Plugin在新版本裡面無法安裝外掛程式,這個問題我不清楚為什麼,可能存在一定相容性問題,我是一直用eclipse 2.X的。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=469720