JProfiler是一個全功能的Java剖析工具(profiler),專用於分析J2SE和J2EE應用程式。它把CPU、線程和記憶體的剖析組合在一個強大的應用中。JProfiler可提供許多IDE整合和應用服務器整合功能。JProfiler直覺式的GUI讓你能夠找到性能瓶頸、抓住內存泄漏(memory leaks)、並解決多線程的問題。它讓你得以對heap walker做資源回收器的root analysis,能夠輕易找出內存泄漏;heap快照(snapshot)模式讓未被引用(reference)的對象, 稍微被引用的對象、或在終結(finalization)序列的對象都會被移除;整合精靈以便剖析瀏覽器的Java外掛功能。html
一、摘要..........................................................................1
二、改善服務器的性能...........................................................1
三、分析器原理...................................................................2
四、JProfiler 簡介...............................................................2
五、JProfiler 特徵...............................................................3
六、本地監控.....................................................................4
七、遠程監控.....................................................................7
八、參考..........................................................................9java
改善 Java 服務器的性能須要模擬負載下的服務器。建立一個模擬環境、蒐集數據而且分析結果多是對許多開發人員的挑戰。這篇文章介紹了使用 JProfiler 跟蹤分析 Java 服務器的性能。linux
簡單的性能問題很容易分離並解決,然而,大的性能問題,如內存溢出或者系統的罷工,一般在系統處於高負載狀況下發生,就不能這麼簡單的處理了。這些問題須要一個獨立的測試環境、一個模擬的負載,而且須要仔細地分析和跟蹤。數組
在這篇文章中,我使用比較通用的工具( JProfiler 和 JBuilder )和設備建立了一個性能監控分析環境,跟蹤本地和遠程的服務器程序,專一於三個性能問題:內存、垃圾回收和多線程運行情況,從而很好的監視JVM 運行狀況及其性能。瀏覽器
服務器的性能改善是依賴於數據的。沒有可靠的數據基礎而更改應用或環境會致使更差的結果。分析器提供有用的 Java 服務器應用信息,但因爲從單用戶負載下的數據與多用戶負載下獲得的數據是徹底不一樣的,這致使分析器的數據並不精確。在開發階段使用分析器來優化應用的性能是一個好的方式,但在高負載下的應用分析能夠取到更好的效果。服務器
在負載下分析服務器應用的性能須要一些基本的元素:session
一、 可控的進行應用負載測試的環境。多線程
二、 可控的人造負載使得應用滿負荷運行。工具
三、 來自監視器、應用和負載測試工具自身的數據蒐集。性能
四、 性能改變的跟蹤。
不要低估最後一個需求(性能跟蹤)的重要性由於若是不能跟蹤性能你就不能實際的管理項目。性能上 10-20% 的改善對單用戶環境來講並無什麼不一樣,但對支持人員來講就不同了。 20% 的改善是很是大的,並且經過跟蹤性能的改善,你能夠提供重要的反饋和持續跟蹤。
雖然性能跟蹤很重要,但有時爲了使後續的測試更加精確而不得不拋棄先前的測試結果。在性能測試中,改善負載測試的精確性可能須要修改模擬環境,而這些變化是必須的,經過變化先後的負載測試你能夠觀察到其中的轉變。
如今幾乎全部的分析器都是從同一個起點和約束開始的: Java 虛擬機分析器界面 (JVMPI) ( 參考 "The Java Virtual Machine Profiler Interface") 。 Sun 微系統的 API 容許工具開發商接口或者鏈接到遵循JVMPI 的 JVM 上,而且監控運做的方式以及 JVM 運行任何 Java 程序時的關鍵事件 -- 從單獨的應用程序到 Applet 、 Servlet 和企業 JavaBeans (EJB) 組件。
在分析器內啓動一個程序意味着生成、捕捉、和觀察大量數據,因此全部的分析器都包含着不一樣的方法來控制數據的流動,在不一樣的標準以及每一封裝包的基礎上進行過濾。一樣 也可使用靈活的正規表達式類型模式來完成。
是一個全功能的 Java 剖析工具( profiler ),專用於分析 J2SE 和 J2EE 應用程序。它把 CPU 、執行緒和內存的剖析組合在一個強大的 應用中。 JProfiler 可提供許多 IDE 整合和應用服務器整合用途。 JProfiler 直覺式的 GUI 讓你能夠找到效能瓶頸、抓出內存漏失 (memory leaks) 、並解決執行緒的問題。它讓你得以對 heap walker 做資源回收器的 root analysis ,能夠輕易找出內存溢出; heap快照( snapshot )模式讓未被參照( reference )的對象、稍微被參照的對象、或在終結( finalization )隊列的對象 都會被移除;整合精靈以便剖析瀏覽器的 Java 外掛功能。
目前最新的版本是 4.1.2 ,幾乎支持全部經常使用的 IDE 和 Application Server ,能夠到其 EJ 官方網站 http://www.ej-technologies.com/ 下載,申請一個十天的試用註冊碼。
JProfiler 的內存視圖部分能夠提供動態的內存使用情況更新視圖和顯示關於內存分配情況信息的視圖。全部的視圖都有幾個彙集層而且可以顯示現有存在的對象和做爲垃圾回收的對象。
在JProfiler的堆遍歷器(Heap walker)中,你能夠對堆的情況進行快照而且能夠經過選擇步驟下尋找感興趣的對象。堆遍歷器有五個視圖:
JProfiler 提供不一樣的方法來記錄訪問樹以優化性能和細節。線程或者線程組以及線程情況能夠被全部的視圖選擇。全部的視圖均可以彙集到方法、類、包或J2EE組件等不一樣層上。CPU視圖部分包括:
對線程剖析,JProfiler提供如下視圖:
觀察JVM的內部狀態,JProfiler提供了不一樣的遙感勘測視圖,以下所示:
系統環境 Windows OS ;軟件 JBuilderX/2005 和 JProfiler 4.1.2
1 、安裝 JBuilderX 和 JProfiler 4.1.2
2 、運行 JProfiler , Session-> IDE integration tab, IDE 選擇Borland JBuilder7 to 2005,點擊Integrate按鈕,選擇JBuilder的安裝目錄,確認,會看到已經將JProfiler以OpenTool的形式,成功整合到JBuilder中,見下圖。
3 、運行 JBuilder ,打開 Run->Configurations ,選擇或新建一個 Runtime ,在 Optimize 選項中就能夠看到 JProfiler ,能夠選擇每次運行程序新建一個 JProfiler 窗口的提示設置。
4 、點擊 Optimize Project 按鈕,運行程序。
5 、彈出以下的 JProfiler 窗口,確認相關的信息便可。
6 、至此,就能夠監控本地服務器的各個方面的性能了。
服務器程序通常運行在遠程的服務器設備上,有時候咱們還須要遠程監控商用的服務器資源。
服務器操做系統 Linux OS ,安裝步驟以下:
一、./jprofiler_linux_4_1_2.sh,出現以下提示:
testing JVM in /usr/jdk1.4 ...
Starting Installer ...
注:對於沒有安裝X Server的機器,須要執行./jprofiler_linux_4_1_2.sh -q,不然會提示,
testing JVM in /usr/jdk1.4 ...
Starting Installer ...
This installer needs access to an X Server.
If this is not possible, you can run the installer in unattended mode
by passing the argument -q to the installer.
二、安裝完畢後,會在/opt目錄下,找到jprofiler的安裝目錄,/opt/jprofiler4。
本地操做系統 WindowXP ,相關的配置以下:
1 、本地安裝 JProfiler , Linux 服務器上也安裝 JProfiler (只有本地 / 監控者的須要輸入序列號)。
2 、打開本地的 JProfiler , session->Integration wizards-> New Remote integration
3 、選擇 on a remote computer , platform 選擇 linux x86/AMD64 ,點擊 next
4 、輸入遠程 ip 地址,點擊 next
5 、輸入遠程 JProfiler 的安裝目錄,默認都安裝在 /opt/jprofiler4 下,一路NEXT
6 、出現下面提示框,按照要求配置下服務器的設置,界面以下:
Java 執行語句中加入下列運行參數
-Xint -Xrunjprofiler:port=8849 -Xbootclasspath/a:/opt/jprofiler4/bin/agent.jar ;
/etc/profile 中加入 export LD_LIBRARY_PATH=/opt/jprofiler4/bin/linux-x86 ,退出、從新登錄。
7 、好了,所有配置完畢,先運行遠程服務器程序,再打開本地的 JProfiler 程序,握手成功後,遠程程序正常運行了。
服務器信息以下:
[root@ns 55556]# tail -f nohup.out
JProfiler> Protocol version 21
JProfiler> Using JVMPI
JProfiler> 32-bit library
JProfiler> Listening on port: 8849.
JProfiler> Native library initialized
JProfiler> Waiting for a connection from the JProfiler GUI ...
// 以上爲本地 JProfiler 連上前的系統提示
JProfiler> Using dynamic instrumentation
JProfiler> Time measurement: elapsed time
JProfiler> CPU profiling enabled
JProfiler> Starting org/anymobile/server/cmwap/CmwapServer ...
2005/12/15 17:05:46 [ INFO] - Starting Cmwap Stand Server ...
2005/12/15 17:05:47 [ INFO] - HandleThread runing ......
若是你但願動態保存當前 Session 的運行數據的快照,點擊 JProfiler 的保存按鈕便可;
能夠經過 JProfiler Start Center 的 Open snapshot tab 打開保存的 Session ;
你也能夠右鍵點擊某個視圖,靜態保存到 HTML 文件,文字描述加視圖圖片;
有一些視圖的數據只會運行一次,不會動態的刷新,如內存視圖中的分配訪問樹等視圖;
WinXP 下 JProfiler 彷佛不支持中文, 2K 下支持的,上面有一些圖片是在 2K 系統上截取的;
另外, JProfiler 還能夠監控某個 Application Server 、 Applet ,功能很是強大,能夠參考軟件自帶的 Help 。
轉載自: http://www.blogjava.net/mrzhangshunli/archive/2007/08/27/140088.html