【開發工具】JAVA效能分析:1、超詳細的JProfiler安裝使用(具體資料分析見2)
一、JProfiler簡單介紹
JProfiler是由ej-technologies GmbH公司開發的一款效能瓶頸分析工具(該公司還開發部署工具)。
其特點:
1、使用方便,介面操作友好
2、對被分析的應用影響小
3、CPU,Thread,Memory分析功能尤其強大,支援對jdbc,noSql, jsp, servlet, socket等進行分析
4、支援多種模式(離線,線上)的分析
5、跨平臺
二、工具準備
下載地址:https://www.ej-technologies.com/download/jprofiler/version_100
1、客戶端(windows)
2、服務端(linux)
下載完成之後,點選安裝包bin目錄下的執行檔案
啟動之後的介面
選單分析:
1.實時監測 Telemetries
- 整體檢視 Overview
顯示堆記憶體、cpu、執行緒以及GC等活動檢視; - 記憶體 Memory
顯示一張關於記憶體變化的活動時間表。 - 記錄吞吐量 Record Throughput
- 顯示一張關於完成的交易數的活動時間表。
- 記錄的物件 Recorded objects
顯示一張關於活動物件與陣列的圖表的活動時間表。 - 垃圾回收 Garbage collector
顯示一張關於垃圾回收活動的活動時間表。 - 類 Classes
顯示一個與已裝載類的圖表的活動時間表。 - 執行緒 Threads
顯示一個與動態執行緒圖表的活動時間表。
2.記憶體剖析 Live Memory
JProfiler 的記憶體檢視部分可以提供動態的記憶體使用狀況更新檢視和顯示關於記憶體分配狀況資訊的檢視。所有的檢視都有幾個聚集層並且能夠顯示現有存在的物件和作為垃圾回收的物件。
- 所有物件
顯示類或在狀況統計和尺碼資訊堆上所有物件的包。你可以標記當前值並顯示差異值。 - 記錄物件 Record objects
顯示類或所有已記錄物件的包。你可以標記出當前值並且顯示差異值。 - 分配訪問樹 Allocation call tree
顯示一棵請求樹或者方法、類、包或對已選擇類有帶註釋的分配資訊的J2EE元件。 - 分配熱點 Allocation hot spots
顯示一個列表,包括方法、類、包或分配已選類的J2EE元件。你可以標註當前值並且顯示差異值。對於每個熱點都可以顯示它的跟蹤記錄樹。 - 類追蹤 Class Tracker
顯示類、包或分配已選類的J2EE元件。你可以標註當前值並且顯示差異值。對於每個物件都可以顯示它的跟蹤記錄樹。
2.堆遍歷 Heap walker
在JProfiler的堆遍歷器(Heap walker)中,你可以對堆的狀況進行快照並且可以通過選擇步驟下尋找感興趣的物件。堆遍歷器有五個檢視:
- 類 Classes
顯示所有類和它們的例項。 - 分配 Allocations
為所有記錄物件顯示分配樹和分配熱點。 - 索引 References
為單個物件和“顯示到垃圾回收根目錄的路徑”提供索引圖的顯示功能。還能提供合併輸入檢視和輸出檢視的功能。 - 資料 Data
為單個物件顯示例項和類資料。 - 時間 Time
顯示一個對已記錄物件的解決時間的柱狀圖。
3. CPU 剖析 CPU View
JProfiler 提供不同的方法來記錄訪問樹以優化效能和細節。執行緒或者執行緒組以及執行緒狀況可以被所有的檢視選擇。所有的檢視都可以聚集到方法、類、包或J2EE元件等不同層上。CPU檢視部分包括:
- 訪問樹 Call tree
顯示一個積累的自頂向下的樹,樹中包含所有在JVM中已記錄的訪問佇列。JDBC,JMS和JNDI服務請求都被註釋在請求樹中。請求樹可以根據Servlet和JSP對URL的不同需要進行拆分。 - 熱點 Hot spots
顯示消耗時間最多的方法的列表。對每個熱點都能夠顯示回溯樹。該熱點可以按照方法請求,JDBC,JMS和JNDI服務請求以及按照URL請求來進行計算。 - 訪問圖 Call graph
顯示一個從已選方法、類、包或J2EE元件開始的訪問佇列的圖。 - 方法統計 Method Statistics
- 複雜分析 Complexity Analysis
- 訪問追蹤 Call Tracer
4. 執行緒剖析 Thread profiler
對執行緒剖析,JProfiler提供以下檢視:
- 執行緒歷史 Thread history
顯示一個與執行緒活動和執行緒狀態在一起的活動時間表。 - 執行緒監控 Thread monitor
顯示一個列表,包括所有的活動執行緒以及它們目前的活動狀況。
5. 監控和鎖 Monitors & Locks
觀察JVM的內部執行緒並檢視狀態:
- 死鎖探測圖表 Deadlock Detection
顯示一個包含了所有在JVM裡的死鎖圖表。 - 目前使用的監測器 Current monitor useage
顯示目前使用的監測器並且包括它們的關聯執行緒。 - 歷史檢測記錄 History usage history
顯示重大的等待事件和阻塞事件的歷史記錄。 - 監測使用狀態 Monitor usage statistics
顯示分組監測,執行緒和監測類的統計監測資料。
6.資料庫監測 Databases
三、實施操作
1、客戶端(這裡主要是針對遠端伺服器的配置設定)
首先,點選Session—>Intergration Wizards(整合嚮導)—>New Remote Integration(新建遠端整合)
然後選擇遠端機器後點擊下一步:
下一步之後選擇響應的伺服器JVM版本:
選擇應用方式,作為客戶端進行連線:
選擇連線伺服器的方式後並配置連線引數:
配置完之後點選下一步並直接點選ok,再點選下一步:
下一步出現就是需要完成伺服器配置檔案的讀取,也就是需要配置遠端伺服器的服務端的配置路徑:
下面需要配置客戶端與服務端連線的通訊埠,如果是要多個應用,可以修改不同的埠號,比如8850,8851等等,不要有其他程序佔用衝突即可:
這一步需要確認配置資訊,並且記住主要幾個要點,第一,需要將本地配置產生的jprofiler配置檔案config.xml拷貝到伺服器上的/opt/jprofiler10.0.4/conf/目錄下,第二,將啟動引數加入到遠端伺服器的啟動引數配置中去:
第10步直接點選完成即可。稍後在連線會話中進行開啟。
2、服務端(主要分為Tomcat和純Java應用的配置)
先將下載下來的linux版本的JProfiler,jprofiler_linux_10_0_4.tar.gz,上傳到遠端伺服器,放置在/opt/下,
然後解壓 tar -zxvf jprofiler_linux_10_0_4.tar.gz,在/opt/下生成jprofiler10.0.4的資料夾
cd /opt/jprofiler10.0.4
上面客戶端配置的時候說的有兩個要點,現在本地開啟config.xml檔案,修改裡面的key,剛下載並註冊的JProfiler,可以通過官網申請到臨時的使用註冊碼,網上找了很多都沒有用,就不要浪費這個時間了。
1、點選https://www.ej-technologies.com/download/jprofiler/trial
這樣就可以申請一個臨時的註冊碼進行使用,然後在自己的軟體上進行更正:
完了之後修改config.xml中第三行的key值:
完成之後將檔案上傳到伺服器的/opt/jprofiler10.0.4/conf/
然後找到應用的啟動項,加入啟動引數。新增的方式有很多種,只要加上下面這個配置既可以了:
$CATALINA_OPTS="$JAVA_OPTS -agentpath:/opt/jprofiler10.0.4/bin/linux-x64/libjprofilerti.so=port=8849,nowait"
最後配置環境變數並使之生效:
vi /etc/profiles
新增下面引數:
source /etc/profiles
這樣就可以啟動應用了,使用命令檢視啟動引數是否新增上:
ps -ef | grep java
[[email protected] bin]$ ps -ef | grep java
/opt/app/tools/jdk1.7.0_80/bin/java -cp.:/opt/app/tools/jdk1.7.0_80/lib/dt.jar:/opt/app/tools/jdk1.7.0_80/lib/tools.jar:
/opt/app/work/pms-online/conf:/opt/app/work/pms-online/apps/jcbank-pms-online-boot-0.0.1-SNAPSHOT/*:/opt/app/work/pms-online/lib/*
-agentpath:/opt/jprofiler10.0.4/bin/linux-x64/libjprofilerti.so=port=8850,nowait
-server -Duser.home=/opt/app -Dapp.home=/opt/app
-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom -Djava.net.preferIPv4Stack=true
-Djava.net.preferIPv4Addresses=true -Dfile.encoding=UTF-8
-Dserver.id=pms-online -Dathena.config=/opt/app/work/pms-online/conf/athena.properties -Dathena.config.decrypt=
-Dspring.profiles.active=test -Dcom.sun.management.jmxremote.port=9090 -Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false -Dlog.active=less
最後再使用客戶端進行監控連線:
問題檢查:
1、安裝過程後啟動連線,會突然失去連線,這個時候需要檢視應用的啟動日誌,比如tomcat的話,就在catalina.out中檢視具體jprofiler>>>的錯誤日誌;
2、如果出現無效的註冊碼,還是上面說的去申請臨時的註冊碼;