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