JProfiler11使用教程之JVM調(diào)優(yōu)問題小結(jié)
安裝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
配置本地監(jiān)控
我們啟動一個本地項目weblogic,Jboss,tomcat或者springboot都行,我們就拿主流的springboot來說(其實內(nèi)嵌的就是tomcat)
然后我們打開jprofiler,監(jiān)控指定的程序
配置遠(yuǎn)程監(jiān)控
我的服務(wù)器是x86的uname -m
在需要監(jiān)聽的目標(biāo)服務(wù)器上安裝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
文件,添加如下內(nèi)容
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/
就是安裝目錄,我們進(jìn)去看看有沒有jre目錄
修改完后,使環(huán)境變量生效source /etc/profile
需要監(jiān)聽的項目必須在服務(wù)器上運行中否則JProfiler 啟動會失敗的
啟動自己的項目然后檢測是否啟動
啟動成功后那么就可以啟動服務(wù)器上的JProfiler服務(wù)了 /opt/jprofiler11/bin/jpenable
選擇[1]然后會顯示客戶端可以連接的端口號,用于客戶端連接服務(wù)器的
配置window下的jprofile11
jProfiler客戶端介紹
儀表盤
這個不用多說,看說明就知道啥東西
查看對象增長情況
ALL Objects(全部對象)
Recorded Objects (記錄對象)
我們可以指定開啟時間內(nèi)記錄對象的的使用情況,這樣就能更佳快速的找到問題 ,每次開關(guān)都會從新統(tǒng)計,還有最關(guān)鍵的就是 Mark Current 這個按鈕,他可以標(biāo)記現(xiàn)在對象的使用情況為綠色,那么行增的對象就是紅色了,這樣一對比就知道那個對象有問題了
右鍵可以刪除標(biāo)記
Allocation Call Tree(記錄調(diào)用樹)
開始后統(tǒng)計調(diào)用情況,每次開關(guān)都會從新統(tǒng)計
Allocation Hot Spots(熱點)
能統(tǒng)計出來開啟時間段內(nèi)使用某些方法或者xxx 的調(diào)用情況,相當(dāng)于反向查詢誰調(diào)用我了,開關(guān)后從新統(tǒng)計
上圖顯示println這個方法被 MathGame.run 和MathGame.main方法調(diào)用,以及他們這些方法一共調(diào)用了多少次和多少時間以及占用的內(nèi)容大小
Class Tracker(類調(diào)用跟蹤)
能檢測指定類,的時間片段調(diào)用情況和調(diào)用頻率來進(jìn)行分析出來,是否有問題
選擇需要監(jiān)控的類或者包那那么當(dāng)這些類進(jìn)行被調(diào)用了,就會在視圖上顯示
可以看到在什么時間調(diào)用了 ,如果想暫停下來
檢測各種調(diào)用情況
Call Tree (調(diào)用樹)
通過關(guān)閉在開啟可以重新統(tǒng)計
一般情況我們會過濾掉我們不想看到的內(nèi)容
選擇demo.就是過濾此包下的全部內(nèi)容,想要恢復(fù)過濾內(nèi)容可以在設(shè)置里進(jìn)行恢復(fù)
Hot Spots(熱點)
Call Graph(查看方法的調(diào)用樹)
Method Statistics(方法統(tǒng)計)
開啟后,這段時間內(nèi)被調(diào)用的方法就會被攔截到
Call tracer 調(diào)用跟蹤
開啟后會記錄這段時間內(nèi)的方法執(zhí)行情況包括內(nèi)部執(zhí)行情況,關(guān)閉后以樹展示出來
從上圖標(biāo)記是紅的,就能看出來方法內(nèi)部執(zhí)行了循環(huán)了
如果不想看到某方法那么可以隱藏掉
恢復(fù)顯示
JavaScript XHR
JProfiler Origin Tracker_v1.0.3.crx
鏈接: https://pan.baidu.com/s/1gnhtmBIcUYJbxecmrKojPg?pwd=rrpu
提取碼: rrpu
要使用此功能,您必須使用Google Chrome 作為瀏覽器并安裝 JProfiler 源跟蹤器擴展。
運行前端時候點擊下
然后插件顏色就變?yōu)榧t色了,那么就說明這個網(wǎng)站激活成功了
然后回到 jprofiler中就發(fā)現(xiàn)在監(jiān)聽中了
檢測線程各種情況
注意: 如果請求的線程內(nèi)部沒有長時間的阻塞或者睡眠,一般都抓不到的,因為更新頻率是2秒一次
Thread History(線程狀態(tài))
看著圖很簡單,除了綠色的其他如果時間過長都有問題,如果出現(xiàn)紅色那么就是死鎖
測試方式就是打開監(jiān)控后去訪問有問題的功能,那么就能排查出來具體的問題, 找到問題的線程,那么我們就能去獲取這個線程內(nèi)部的堆棧,從堆棧中就能看出來問題是啥
Thread Monitor(線程列表)
如果線程過多, 在Thread History中不好找那么我們可以通過這個列表進(jìn)行篩選,這樣就能快速鎖定有問題的線程了
Thread Dumps(線程堆棧)
通過上面的方法找到問題的線程方法后,然后我們就能在 Thread Dumps去查詢對應(yīng)方法的堆棧信息
每次點擊都能獲取最新的全部線程堆棧信息,并且以樹型展示
上圖紅色的就是死鎖,告訴你這個鎖發(fā)生在那個類多少行
這種都是第三方的請求,(有用戶的有其他工具的,要會分辨,看堆棧就能看出來的)
類似于下圖這種就不用看,這都是系統(tǒng)自己的請求或者其他的請求
上圖是tomcat內(nèi)部進(jìn)行喚醒和掛起線程的操作,估計是線程池的東西
我們一般找下面這圖出現(xiàn)的請求這個才是真實的請求
從上圖就能看出來問題了,是內(nèi)部一直在調(diào)用sleep,看堆棧是從下往上看,然后我們?nèi)タ丛创a
數(shù)據(jù)庫連接和sql語句執(zhí)行情況
Mybaitis 和JDBC都一樣
1秒(s)=1000毫秒 1毫秒(ms)=1000微妙 10萬微妙(us)=1秒
從上圖可以看到我查詢用戶數(shù)量才使用了1毫秒不到
可以進(jìn)行開關(guān)進(jìn)行從新監(jiān)控
請求情況
注意: 如果是請求是死循環(huán)或者死鎖那么這個是監(jiān)控不到的,必須這個請求能響應(yīng)才行
至于其他的功能我基本沒用到這里就不說了,用到了在補上
堆快照分析 導(dǎo)出當(dāng)前堆的快照
導(dǎo)入對堆文件快照
分析堆快照
Current Object Set(當(dāng)前堆的所有對象情況)
一般需要多個堆的快照進(jìn)行對比,進(jìn)行發(fā)現(xiàn)是否有內(nèi)存泄露問題和對象增長速度過快問題,從而進(jìn)行分析原因
Thread Dump(當(dāng)前堆的線程情況)
可以查看到死鎖,或者死循環(huán)或者長時間處于等待狀態(tài)的線程,執(zhí)行的方法和問題原因
比較快照
注意: (.hprof)文件的快照只支持內(nèi)存比較 ,而jps快照是支持所有的,但是需要開啟部分功能才行
我準(zhǔn)備了3個同源的堆快照(.hprof),是在不同時間段獲取的
同時選取需要對比的全部快照
當(dāng)然也可以后期一個一個添加
然后按住Shift+鼠標(biāo)左鍵選擇2個需要對比的快照(一次最多對比2個快照,建議拿第一個快照和比第一個時間段大的快照進(jìn)行依次對比)
內(nèi)存比較
加號就是 333333.hprof這個快照比00000.hprof快照增加的
最后下面有一個匯總,333333.hprof比00000.hprof 總體增加了還是減少了多少內(nèi)存
對比不同時間段快照,可以看出來內(nèi)存是一直處于增長的,還是有減有增,如果一直維持在一個范圍那么可以接收的 ,如果對比多個快照發(fā)現(xiàn)都是一直處于增長沒有減過那么肯定是有問題的,時間長了就會發(fā)生oom了
調(diào)用情況比較
必須開啟
然后保存為jps文件
然后就可以進(jìn)行對比了
到此這篇關(guān)于JProfiler11使用教程之JVM調(diào)優(yōu)的文章就介紹到這了,更多相關(guān)JProfiler11使用JVM調(diào)優(yōu)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java自定義任務(wù)類定時執(zhí)行任務(wù)示例 callable和future接口使用方法
Callable是類似于Runnable的接口,實現(xiàn)Callable接口的類和實現(xiàn)Runnable的類都是可被其它線程執(zhí)行的任務(wù)2014-01-01手把手帶你了解Java-Stream流方法學(xué)習(xí)及總結(jié)
這篇文章主要介紹了通過實例了解JavaStream流的方法學(xué)習(xí)和總結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2021-08-08skywalking分布式服務(wù)調(diào)用鏈路追蹤APM應(yīng)用監(jiān)控
這篇文章主要為大家介紹了skywalking分布式服務(wù)調(diào)用鏈路追蹤APM應(yīng)用監(jiān)控的功能使用說明,有需要的朋友可以借鑒參考下,希望能夠有所幫助2022-03-03Java并發(fā)編程示例(二):獲取和設(shè)置線程信息
這篇文章主要介紹了Java并發(fā)編程示例(二):獲取和設(shè)置線程信息,本文是系列文章的第二篇,本文著重講解Thread類的幾個重要屬性,需要的朋友可以參考下2014-12-12