首頁 > 軟體

JProfiler11使用教學之JVM調優問題小結

2022-03-15 19:00:46

安裝JProfiler

jprofiler_windows-x64_11_0_2

連結: https://pan.baidu.com/s/1EWxW5VT100D1v_HVvKYGqQ?pwd=qif5 
提取碼: qif5 

JProfiler11破解

然後開啟破解機器 KeyGen.exe

連結: https://pan.baidu.com/s/13MX6iLFtcmerdGovYjOh4g?pwd=cx7e 
提取碼: cx7e 

設定本地監控

我們啟動一個本地專案weblogic,Jboss,tomcat或者springboot都行,我們就拿主流的springboot來說(其實內嵌的就是tomcat)

然後我們開啟jprofiler,監控指定的程式

設定遠端監控

我的伺服器是x86的uname -m
在需要監聽的目標伺服器上安裝jprofiler_linux_11_0_2.tar.gz

連結: https://pan.baidu.com/s/1O03jqyBdsPZHt3zpoMzwAg?pwd=n297 
提取碼: n297 

我是放在/opt 下,解壓tar zxfv jprofiler_linux_11_0_2.tar.gz,重新命名為:jprofiler11
設定/etc/profile檔案,新增如下內容

export INSTALL4J_JAVA_HOME=/usr/local/src/java/java-se-8u41-ri/jre  #jdk安裝目錄下
export LD_LIBRARY_PATH=/opt/jprofiler11/bin/linux-x86  #jprofile的安裝目錄下

找java安裝目錄whereis java

/usr/local/src/java/java-se-8u41-ri/ 就是安裝目錄,我們進去看看有沒有jre目錄

修改完後,使環境變數生效
source /etc/profile

需要監聽的專案必須在伺服器上執行中否則JProfiler 啟動會失敗的

啟動自己的專案然後檢測是否啟動

啟動成功後那麼就可以啟動伺服器上的JProfiler服務了 /opt/jprofiler11/bin/jpenable

選擇[1]然後會顯示使用者端可以連線的埠號,用於使用者端連線伺服器的

設定window下的jprofile11

jProfiler使用者端介紹

儀表盤

這個不用多說,看說明就知道啥東西

檢視物件增長情況

ALL Objects(全部物件)

Recorded Objects (記錄物件)

我們可以指定開啟時間內記錄物件的的使用情況,這樣就能更佳快速的找到問題 ,每次開關都會從新統計,還有最關鍵的就是 Mark Current 這個按鈕,他可以標記現在物件的使用情況為綠色,那麼行增的物件就是紅色了,這樣一對比就知道那個物件有問題了

右鍵可以刪除標記

Allocation Call Tree(記錄呼叫樹)

開始後統計呼叫情況,每次開關都會從新統計

Allocation Hot Spots(熱點)

能統計出來開啟時間段內使用某些方法或者xxx 的呼叫情況,相當於反向查詢誰呼叫我了,開關後從新統計

上圖顯示println這個方法被 MathGame.run 和MathGame.main方法呼叫,以及他們這些方法一共呼叫了多少次和多少時間以及佔用的內容大小

Class Tracker(類呼叫跟蹤)

能檢測指定類,的時間片段呼叫情況和呼叫頻率來進行分析出來,是否有問題

選擇需要監控的類或者包那那麼當這些類進行被呼叫了,就會在檢視上顯示

可以看到在什麼時間呼叫了 ,如果想暫停下來

檢測各種呼叫情況

Call Tree (呼叫樹)

通過關閉在開啟可以重新統計

一般情況我們會過濾掉我們不想看到的內容

選擇demo.就是過濾此包下的全部內容,想要恢復過濾內容可以在設定裡進行恢復

Hot Spots(熱點)

Call Graph(檢視方法的呼叫樹)

Method Statistics(方法統計)

開啟後,這段時間內被呼叫的方法就會被攔截到

Call tracer 呼叫跟蹤

開啟後會記錄這段時間內的方法執行情況包括內部執行情況,關閉後以樹展示出來

從上圖示記是紅的,就能看出來方法內部執行了迴圈了

如果不想看到某方法那麼可以隱藏掉

恢復顯示

JavaScript XHR

JProfiler Origin Tracker_v1.0.3.crx

連結: https://pan.baidu.com/s/1gnhtmBIcUYJbxecmrKojPg?pwd=rrpu 
提取碼: rrpu 

要使用此功能,您必須使用Google Chrome 作為瀏覽器並安裝 JProfiler 源跟蹤器擴充套件。

執行前端時候點選下

然後外掛顏色就變為紅色了,那麼就說明這個網站啟用成功了

然後回到 jprofiler中就發現在監聽中了

檢測執行緒各種情況

注意: 如果請求的執行緒內部沒有長時間的阻塞或者睡眠,一般都抓不到的,因為更新頻率是2秒一次

Thread History(執行緒狀態)

看著圖很簡單,除了綠色的其他如果時間過長都有問題,如果出現紅色那麼就是死鎖
測試方式就是開啟監控後去存取有問題的功能,那麼就能排查出來具體的問題, 找到問題的執行緒,那麼我們就能去獲取這個執行緒內部的堆疊,從堆疊中就能看出來問題是啥

Thread Monitor(執行緒列表)

如果執行緒過多, 在Thread History中不好找那麼我們可以通過這個列表進行篩選,這樣就能快速鎖定有問題的執行緒了

Thread Dumps(執行緒堆疊)

通過上面的方法找到問題的執行緒方法後,然後我們就能在 Thread Dumps去查詢對應方法的堆疊資訊
每次點選都能獲取最新的全部執行緒堆疊資訊,並且以樹型展示

上圖紅色的就是死鎖,告訴你這個鎖發生在那個類多少行

這種都是第三方的請求,(有使用者的有其他工具的,要會分辨,看堆疊就能看出來的)

類似於下圖這種就不用看,這都是系統自己的請求或者其他的請求

上圖是tomcat內部進行喚醒和掛起執行緒的操作,估計是執行緒池的東西

我們一般找下面這圖出現的請求這個才是真實的請求

從上圖就能看出來問題了,是內部一直在呼叫sleep,看堆疊是從下往上看,然後我們去看原始碼

資料庫連線和sql語句執行情況

Mybaitis 和JDBC都一樣

1秒(s)=1000毫秒 1毫秒(ms)=1000微妙 10萬微妙(us)=1秒
從上圖可以看到我查詢使用者數量才使用了1毫秒不到

可以進行開關進行從新監控

請求情況

注意: 如果是請求是死迴圈或者死鎖那麼這個是監控不到的,必須這個請求能響應才行

至於其他的功能我基本沒用到這裡就不說了,用到了在補上

堆快照分析 匯出當前堆的快照

匯入對堆檔案快照

分析堆快照

Current Object Set(當前堆的所有物件情況)

一般需要多個堆的快照進行對比,進行發現是否有記憶體洩露問題和物件增長速度過快問題,從而進行分析原因

Thread Dump(當前堆的執行緒情況)

可以檢視到死鎖,或者死迴圈或者長時間處於等待狀態的執行緒,執行的方法和問題原因

比較快照

注意: (.hprof)檔案的快照只支援記憶體比較 ,而jps快照是支援所有的,但是需要開啟部分功能才行

我準備了3個同源的堆快照(.hprof),是在不同時間段獲取的

同時選取需要對比的全部快照

當然也可以後期一個一個新增

然後按住Shift+滑鼠左鍵選擇2個需要對比的快照(一次最多對比2個快照,建議拿第一個快照和比第一個時間段大的快照進行依次對比)

記憶體比較

加號就是 333333.hprof這個快照比00000.hprof快照增加的
最後下面有一個彙總,333333.hprof比00000.hprof 總體增加了還是減少了多少記憶體

對比不同時間段快照,可以看出來記憶體是一直處於增長的,還是有減有增,如果一直維持在一個範圍那麼可以接收的 ,如果對比多個快照發現都是一直處於增長沒有減過那麼肯定是有問題的,時間長了就會發生oom了

呼叫情況比較

必須開啟

然後儲存為jps檔案

然後就可以進行對比了

到此這篇關於JProfiler11使用教學之JVM調優的文章就介紹到這了,更多相關JProfiler11使用JVM調優內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com