開發自動化系列-工具集(二)系統性能監控工具

摘    要 html

孔子云:工欲善其事,必先利其器。做爲開發人員,咱們致力於爲最終用戶實現工做流程自動化;然而,許多開發人員卻疏忽了將本身的開發流程自動化。企業級應用系統涉及到開發、測試、部署、實施等一系列開發流程,在整個軟件開發過程當中咱們如何藉助工具、方法和模式使過程簡單自動化,減小一些低效繁瑣的開發工做量。 數據庫

本系列試圖使用一系列的工具介紹幫助你們在平常工做中減輕繁雜低效的開發工做,藉助於現有的一系列工具提高你們的開發效率,使你們平常工做作到事半功倍。 windows

在 Java 程序的開發過程當中,不可避免地會遇到內存使用、性能瓶頸等問題。Java Profiler 工具能幫助開發人員快速、有效地定位這些問題,所以成爲了 Java 開發過程當中的一個重要工具數組

本文做爲該系列的第二章,介紹Java EE應用的系統性能監控工具JProfiler,JProfiler能夠經過時時的監控系統的內存使用狀況,隨時監視垃圾回收,線程運行情況等手段,從而很好的監視JVM運行狀況及其性能。經過介紹這個工具的使用,幫助開發人員發現系統應用的性能瓶頸,提高系統運行性能。 瀏覽器

1、 JProfiler是什麼? 緩存

JProfiler是一個全功能的 Java 剖析工具( profiler ),專用於分析 J2SE 和 J2EE 應用程序。它把 CPU 、執行緒和內存的剖析組合在一個強大的應用中。 JProfiler 可提供許多 IDE 整合和應用服務器整合用途。 JProfiler 直覺式的 GUI 讓你能夠找到效能瓶頸、抓出內存漏失 (memory leaks) 、並解決執行緒的問題。它讓你得以對 heap walker 做資源回收器的 root analysis ,能夠輕易找出內存溢出; heap 快照( snapshot )模式讓未被參照( reference )的對象、稍微被參照的對象、或在終結( finalization )隊列的對象 都會被移除;整合精靈以便剖析瀏覽器的 Java 外掛功能。 性能優化

JProfiler的原理首先在於JProfiler使用JVM提供的JVMPI虛擬機監視接口,它是一個用於JVM與監控程序之間雙向調用的接口,雙向是指JVMPI一方面提供事件的方式通知監控程序JVM的信息(如堆分配、線程啓動等),另外一方面也提供方法讓監控程序主動請求得到JVM更多的信息。其次,JProfiler還提供探查代理,從傳輸協議中獲取各類監控信息。 服務器

2、 JProfiler能作些什麼? 多線程

從功能上而言,JProfiler提供瞭如下功能: 工具

l 內存消耗的測量

l 內存堆棧跟蹤

l CPU負載分析

l 瞬時堆分配信息

l 線程分析

l 虛擬機負載可視化監控

l GC分析

l 經過遠程進行分析

JProfilerJVM收集到的信息經過GUI可讓用戶經過觀察獲取當前應用的JVM各類狀況,從而進行性能調優,好比找到哪一個對象佔用的內存比較多;哪一個方法佔用CPU資源比較多,服務器線程狀態、是否存在阻塞問題,服務器是否存在內存泄漏等問題。

3、 JProfiler怎麼用?

JProfiler能夠對Java應用、服務器應用進行分析,並且也支持對服務器進行遠程的監控,綜合公司狀況,現主要介紹監聽本地Weblogic服務器。

JProfiler 7.1.2  安裝後輸入註冊碼(這裏使用的是破解版)

1. 監聽本地Weblogic服務



新建配置


選擇Weblogic





選擇On this computer


選擇JVM,模式使用hotspot


三種模式,第一種是手動鏈接,手動啓動Weblogic服務器後再使用JProfiler鏈接,第二種是捆綁Weblogic啓動文件,JProfiler同時啓動服務和監聽,第三種是經過快照實現離線監聽,配置好觸發器記錄監控數據後經過離線月度監控報告,這裏採用第一種。

選擇Weblogic啓動文件。

接下來繼續點下一步知道完成便可,完成後在服務器域下會生成一個針對JProfiler的執行文件startWebLogic_jprofiler.cmd,而實際上這裏只是把這個執行文件加入如下配置。


set JPROFILER_OPTIONS=-agentpath:C:\PROGRA~1\JPROFI~1\bin\windows\jprofilerti.dll=port=8849 %JPROFILER_OPTIONS%

點擊這個startWebLogic_jprofiler.cmd啓動服務,在JProfiler進入StartCenter


啓動配置好的會話


顯示這個頁面表示鏈接成功


4、 JProfiler怎麼去分析

1 內存視圖

JProfiler 的內存視圖部分能夠提供動態的內存使用情況更新視圖和顯示關於內存分配情況信息的視圖。全部的視圖都有幾個彙集層而且可以顯示現有存在的對象和做爲垃圾回收的對象。

圖中是JProfiler的內存視圖,經過過濾器設置過濾報名com.comtop能夠得到系統代碼在服務器中的內存佔用狀況,這裏能夠看到CIMObjectIdMap在內存中有着海量的實體,也佔用了11M內存,經分析能夠推測CIMObjectIdMap這個臺賬Id映射對象是把數據庫的內容緩存到內存中供臺賬模塊的快速調用。


根據內存視圖能夠看到服務器的內存主要被那些對象佔用,能夠找出一些內存開銷特別大的類、以及分析形成內存泄漏的問題。


內存視圖下的功能模塊

ü 全部對象(All Objects) :顯示類或在情況統計和尺碼信息堆上全部對象的包。你能夠標記當前值並顯示差別值。 

ü 記錄對象(Record objects) :顯示類或全部已記錄對象的包。你能夠標記出當前值而且顯示差別值。 

ü 分配訪問樹(Allocation call tree):顯示一棵請求樹或者方法、類、包或對已選擇類有帶註釋的分配信息的J2EE組件。 

ü 分配熱點(Allocation hot spots) :顯示一個列表,包括方法、類、包或分配已選類的J2EE組件。你能夠標註當前值而且顯示差別值。對於每一個熱點均可以顯示它的跟蹤記錄樹。


2 堆遍歷(Heap walker 

JProfiler的堆遍歷器(Heap walker),你能夠對堆的情況進行快照而且能夠經過選擇步驟下尋找感興趣的對象。堆遍歷器包括五個視圖,以下: 

ü 類Classes:顯示全部類和它們的實例。 

ü 分配Allocations:爲全部記錄對象顯示分配樹和分配熱點。 

ü 索引References:爲單個對象和「顯示到垃圾回收根目錄的路徑」提供索引圖的顯示功能。還能提供合併輸入視圖和輸出視圖的功能。 

ü 數據Data:爲單個對象顯示實例和類數據。 

ü 時間Time:顯示一個對已記錄對象的解決時間的柱狀圖。


3 CPU視圖(CPU Views 

   JProfiler 提供不一樣的方法來記錄訪問樹以優化性能和細節。線程或者線程組以及線程情況能夠被全部的視圖選擇。全部的視圖均可以彙集到方法、類、包或J2EE組件等不一樣層上。CPU視圖部分包括: 

ü 訪問樹Call tree:顯示一個積累的自頂向下的樹,樹中包含全部在JVM中已記錄的訪問隊列。JDBC,JMSJNDI服務請求都被註釋在請求樹中。請求樹能夠根據ServletJSPURL的不一樣須要進行拆分。 

ü 熱點Hot spots:顯示消耗時間最多的方法的列表。對每一個熱點都可以顯示回溯樹。該熱點能夠按照方法請求,JDBCJMSJNDI服務請求以及按照URL請求來進行計算。 

ü 訪問圖Call graph :顯示一個從已選方法、類、包或J2EE組件開始的訪問隊列的圖。

好比下圖,服務器啓動時的CIMSchemaLoadServlet,能夠查看到這個方法一直佔用CPU資源,這個臺賬的cim模型相關的方法,能夠跟蹤到具體執行開銷到那個方法上,從而進行性能優化。

經過hot spots視圖 能夠發現當前消耗時間最多的方法列表,從而找到性能改進突破點,以下面的getAttributeValueType方法是目前最耗性能的方法。

再查看Call Graph視圖,能夠分析某個方法的性能開銷細節。

4 線程視圖(Thread Views

線程視圖能夠查看服務的線程運行狀況,能夠對服務器的狀況進行分析,也能夠對線程形成的服務器問題進行分析。

線程歷史(Thread History顯示一個與線程活動和線程狀態在一塊兒的活動時間表。查看線程在服務器的運行狀況、線程的運行歷史,能夠在時間軸上查看線程等待、阻塞等等的狀況。

線程監控(Thread Monitor顯示一個列表,包括全部的活動線程以及它們目前的活動情況.查看線程的整體狀況,包括線程建立的調用棧。

線程轉存(Thread DumpsDump出某個時刻的全部線程,把當前線程模型記錄一個快照。

服務器線程的運行狀況(橙色是等待狀態,青色是Net I/O線程)。


5 監視器視圖(Monitor Views

暫未發現該視圖的具體可用場景。


6 VM遙感勘測視圖(VM Telemetry Views)

這個主要是針對虛擬機的各類緯度監測視圖。這裏只能對機器進行一個總體狀況的觀察,並無更細的問題跟蹤功能。

ü 內存 Memory:顯示服務器的內存狀況的時間表,這裏主要針對的是JVM的各內存分區的可用、已用內存大小。可選堆內存(Heap包括 PS Eden Space年輕代,PS OLD Gen年老代,PS Survivor交換區)的內存使用和回收狀況。 或非堆內存(Non-Heap 包括Code CachePS Perm Gen

ü 記錄的對象 Recorded objects:顯示一張關於活動對象與數組的圖表的活動時間表。 

ü 對象吞吐量 Recorded Throughput:顯示一張記錄每秒建立對象和銷燬對象的速度的活動時間表。 

ü 垃圾回收 GC Activity:GC所佔cpu狀況

ü 類 Classes:顯示一個與已裝載類的圖表的活動時間表。 

ü 線程 Threads:顯示一個與動態線程圖表的活動時間表。 

ü CPU Load:目前工程佔用系統cpu狀態。


7 系統探偵 JEE & Probes

這是JProfile 7 的新特性,專門針對JavaWeb應用而設,能夠針對JDBCJNDIJMSServletSocketsProcessess的狀況進行分析。展現的視圖有時間線、概覽、熱點監測(針對耗時和發生次數)、勘測(吞吐量、建立數等等內容的監測)。

監測JDBC

能夠查看Time Line 查看服務器對數據庫的鏈接狀況,能夠分析服務器是否有鏈接數量是否正常、是否存在未關閉的鏈接等等。

經過熱點(Hot Spots)能夠監測某段SQL語句的執行耗時


l JNDI 

能夠監測JNDI能夠監測某項資源的請求調用狀況。

這裏能夠看到從某個JSP的請求,能夠看到每一個JSP都被兩個過濾器處理。


l JMS

這裏能夠監控服務器的消息服務狀況。


l Servlets 

這裏能夠監測服務器Servlet或者JSP請求狀況,能夠統計系統頁面的訪問時間以及訪問次數,能夠找到服務器耗時最大的頁面。


l Sockets 

查看服務器的SocketIO操做狀況,能夠監測、分析鏈接服務器的客戶端狀況。

以下圖,在Socket監測下,能夠獲得服務器的數據庫鏈接信息、客戶端鏈接、客戶端請求內容等等。




5、 JProfiler的離線記錄功能

因爲現場環境和測試經過長期監測的方式去分析問題有必定的限制,由於不可能長時間守候監視程序,所以這裏介紹一個JProfiler提供的離線監測功能。經過配置不一樣的觸發器,在不一樣條件下觸發數據記錄(如服務器啓動時開始記錄、服務器關閉時中止記錄並保存)。數據經過快照文件的方式存放,經過分析快照文件便可對服務器的運行狀況進行研究。

具體配置方式以下:


一樣按照上述的方式新建一個新的配置,在這一頁配置項選擇第三項(注意,採用離線監測的方式時,將不可以實時鏈接服務器進行監控)。









打開StartCenter ,選中剛剛新建的Session,點擊編輯按鈕進入編輯頁面。

選擇Triggers Settings ,點擊新建按鈕新建觸發器,根據須要創建觸發器。



這裏就定義了兩個觸發器:服務器啓動時觸發開始記錄數據,服務關閉時結束數據記錄並保存。

定義完成後,打開startWebLogic_jprofiler.cmd即按照配置進行數據記錄。


以保存的快照文件,經過Session->Open Snapshot打開快照便可打開記錄的快照數據。


觸發器可以根據如下條件觸發:

ü 監聽某個類的某個方法,當這個方法被調用時觸發。

ü 虛擬機內存達到必定值時觸發(如當應用的內存值達到一個異常值時)。

ü CPU負荷達到必定值時觸發。

ü 應用發生Out of memory exception時觸發。

ü 定時觸發,每隔一段時間觸發。


所以,根據以上觸發器,能夠構建如下典型的用法:

ü 當服務器內存佔用或者CPU負荷達到必定異常值時,記錄當前的系統各項指標的快照,找到致使問題的緣由。

ü 實現由人手觸發生成的系統當前指標報告。

ü 定時收集服務器運行狀況數據。

ü 當出現問題時記錄問題的現場狀況。



6、 總結

綜合對JProfiler的多方面研究,得出如下結論,

1. JProfiler的功能能夠完成如下典型的性能調優工做:系統的SQL性能調優、代碼內存佔用調優、代碼性能調優、多線程調試、Web服務的優化及分析等等,按照快照方式也能夠實現服務器異常(CPU佔用異常、內存佔用異常甚至宕機)時現場狀況採集。

2. JProfiler適用性十分廣,既能夠用於開發組的代碼級別的性能調優和代碼分析,也能夠用於產品級的服務器監控、問題預防,建議開發組、配置管理組嘗試投入使用,也能夠做爲技術管理組對代碼性能調優的重要數據來源。

3. JProfiler的使用不算困難,開發組具有能力發佈並對本身本地的系統進行分析和性能調優,而配置管理組也能夠在測試環境中配置JProfiler,按期輸出運行報告做爲性能分析和性能調優。

7、 參考資料

1.JProfiler  http://www.ej-technologies.com/products/jprofiler/overview.html

相關文章
相關標籤/搜索