JVM性能監(jiān)控和故障處理工具(二)JDK的可視化工具

JDK除了提供大量的命令行工具外靖榕,還有兩個(gè)功能強(qiáng)大的可視化工具:JConsole和VisualVM,這兩個(gè)工具是JDK的正式成員。

JConsole(Java監(jiān)視與管理控制臺(tái))

  • JConsole(Java Monitoring and Management Console)是一種基于JMX的可視化監(jiān)視片林、管理工具。
  • 它管理部分的功能是針對JMX MBean進(jìn)行管理怀骤,由于MBean可以使用代碼费封、中間件服務(wù)器的管理控制臺(tái)或者所有符合JMX規(guī)范的軟件進(jìn)行訪問,所以這里著重介紹監(jiān)視部分的功能蒋伦。

1. 啟動(dòng)JConsole

  • 通過JDK/bin目錄下的“jconsole.exe”啟動(dòng)JConsole后弓摘,將自動(dòng)搜索處本機(jī)運(yùn)行的所有虛擬機(jī)進(jìn)程,不需要用戶自己使用jps來查詢了痕届。


    JConsole連接界面.png
  • 主界面共包括“概述”衣盾、“內(nèi)存”、“線程”爷抓、“類”势决、“VM摘要”、“MBean”蓝撇。

    JConsole主界面.png

    “概述”頁簽顯示的是整個(gè)虛擬機(jī)主要運(yùn)行數(shù)據(jù)的概覽果复,其中包括“堆內(nèi)存使用情況”、“線程”渤昌、“類”虽抄、“CPU使用情況”4種信息的曲線圖走搁,這些曲線圖是后面“內(nèi)存”、“線程”迈窟、“類”頁簽的信息匯總私植。

2. 內(nèi)存監(jiān)控

  • “內(nèi)存”頁簽相當(dāng)于可視化的jstat命令,用于監(jiān)視受收集器管理的虛擬機(jī)內(nèi)存(Java堆和永久代)的變化趨勢车酣。


    JConsole的內(nèi)存監(jiān)控.png

3. 線程監(jiān)控

  • “線程”頁簽的功能相當(dāng)于可視化的jstack命令曲稼,遇到線程停頓時(shí)可以使用這個(gè)頁簽進(jìn)行監(jiān)控分析湖员。
  • 線程長時(shí)間停頓的主要原因只要有:等待外部資源(數(shù)據(jù)庫連接贫悄、網(wǎng)絡(luò)資源、設(shè)備資源等)娘摔、死循環(huán)窄坦、鎖等待(活鎖和死鎖)。
    JConsole的線程監(jiān)控.png

4.類監(jiān)控

JConsole的類監(jiān)控.png

5.VM監(jiān)控

JConsole的VM監(jiān)控.png

6.MBean監(jiān)控

JConsole的MBean監(jiān)控.png

VisualVM(多合一故障處理工具)

  • VisualVM(All-in-One Java Troubleshooting Tool)是到目前為止隨JDK發(fā)布的功能最強(qiáng)大的運(yùn)行監(jiān)視和故障處理程序凳寺,并且可以預(yù)見在未來一段時(shí)間內(nèi)都是官方主力發(fā)展的虛擬機(jī)故障處理工具鸭津。

  • JDK8以后,不在提供visualvm.exe肠缨,需到官網(wǎng)下載相應(yīng)版本:https://visualvm.github.io/download.html

  • 它還提供很多其他方面的功能曙博,如性能分析(Profiling)。

  • VisualVM還有一個(gè)很大的優(yōu)點(diǎn)
    不需要被監(jiān)視的程序基于特殊Agent運(yùn)行怜瞒,因此它對應(yīng)用程序的實(shí)際性能的影響很小父泳,使得它直接應(yīng)用在生產(chǎn)環(huán)境中。


    VisualVM主界面0.png
VisualVM主界面.png

1. VisualVM兼容范圍與插件安裝

VisualVM基于NetBeans平臺(tái)開發(fā)吴汪,因此它一開始就具備了插件擴(kuò)展功能的特性惠窄,通過插件擴(kuò)展支持,VisualVM可以做到漾橙。

  • 顯示虛擬機(jī)進(jìn)程以及進(jìn)程中的配置杆融、環(huán)境信息(jps、jinfo)霜运。
  • 監(jiān)視應(yīng)用程序的CPU脾歇、GC、堆淘捡、方法區(qū)以及線程的信息(jstat藕各、jstack)。
  • dump以及分析堆轉(zhuǎn)儲(chǔ)快照(jmap焦除、jhat)激况。
  • 方法級的程序運(yùn)行性能分析,找出被調(diào)用最多、運(yùn)行時(shí)間最長的方法乌逐。
  • 離線程序快照:收集程序的運(yùn)行時(shí)配置竭讳、線程dump、內(nèi)存dump等信息建立一個(gè)快照浙踢,可以將快照發(fā)送開發(fā)者處進(jìn)行Bug反饋绢慢。
  • 其它plugins的無限的可能性...

首次啟動(dòng)VisualVM后,不必著急找應(yīng)用程序進(jìn)行監(jiān)測洛波,因?yàn)樵賄isualVM還沒有加載任何插件胰舆,雖然基本的監(jiān)視、線程面板的功能主程序都以默認(rèn)插件的形式提供了奋岁,但是不給VisualVM裝任何擴(kuò)展插件,就相當(dāng)于放棄了它最精華的功能荸百,和沒有安裝任何應(yīng)用軟件操作系統(tǒng)差不多闻伶。

2.生成、瀏覽堆轉(zhuǎn)儲(chǔ)快照

  • 在VisualVM中生成dump文件有兩種方式够话,可以執(zhí)行下列任一操作
    1. 在“應(yīng)用程序”窗口中右鍵單擊應(yīng)用程序節(jié)點(diǎn)蓝翰,然后選擇“堆Dump”。
    2. 在“應(yīng)用程序”窗口中雙擊應(yīng)用程序節(jié)點(diǎn)以打開應(yīng)用程序標(biāo)簽女嘲,然后在“監(jiān)視”標(biāo)簽中單擊“堆Dump”畜份。

生成了dump文件之后,應(yīng)用程序頁簽將在該堆的應(yīng)用程序下增加一個(gè)以[heapdump]開頭的子節(jié)點(diǎn)欣尼,并且在主頁簽中打開了該轉(zhuǎn)儲(chǔ)快照爆雹。

從堆頁簽中的“摘要”面板可以看到應(yīng)用程序dump時(shí)的運(yùn)行時(shí)參數(shù)、System.getProperties()的內(nèi)容愕鼓、線程堆棧等信息钙态,“類”面板則是以類為統(tǒng)計(jì)口徑統(tǒng)計(jì)類的實(shí)例數(shù)量、容量信息菇晃,“實(shí)例”面板不能直接使用册倒,因?yàn)椴荒艽_定用戶想查看哪個(gè)類的實(shí)例,所以需要通過“類”面板進(jìn)入磺送,在“類”中選擇一個(gè)關(guān)心的類后雙擊鼠標(biāo)驻子,即可在“實(shí)例”里面看見此類的500個(gè)實(shí)例的具體屬性信息」啦樱“OQL控制臺(tái)”面板中就是運(yùn)行OQL查詢語句的崇呵,同jhat中介紹的OQL功能一樣。

3.分析程序性能

  • 在Profiler頁簽中馅袁,VisualVM提供了程序運(yùn)行期間方法級的CPU執(zhí)行時(shí)間分析以及內(nèi)存分析演熟,做Profiling分析肯定會(huì)對程序運(yùn)行性能有比較大的影響,所以一般不在生產(chǎn)環(huán)境中使用這項(xiàng)功能。
  • 要開始分析芒粹,先選擇“CPU”和“內(nèi)存”按鈕中的一個(gè)兄纺,然后切換到應(yīng)用程序中對程序進(jìn)行操作,VisualVM會(huì)記錄到這段時(shí)間中應(yīng)用程序執(zhí)行過的方法化漆。
    如果是CPU分析估脆,將會(huì)統(tǒng)計(jì)每個(gè)方法的執(zhí)行次數(shù)、執(zhí)行耗時(shí)座云;
    如果是內(nèi)存分析疙赠,則會(huì)統(tǒng)計(jì)每個(gè)方法關(guān)聯(lián)的對象數(shù)以及這些對象所占的空間。
    分析結(jié)束后朦拖,點(diǎn)擊“停止”按鈕結(jié)束監(jiān)控過程圃阳。

4.BTrace動(dòng)態(tài)日志跟蹤

  • BTrace是一個(gè)很“有趣”的VisualVM插件,本身也是可以獨(dú)立運(yùn)行的程序璧帝。
  • 它的作用是在不停止目標(biāo)程序運(yùn)行的前提下层坠,通過HotSpot虛擬機(jī)的HotSwap技術(shù)動(dòng)態(tài)加入原本并不存在的調(diào)試代碼橘洞。
  • BTrace的用法還有許多,打印調(diào)用堆棧、參數(shù)舰绘、返回值只是最基本的應(yīng)用笼才,在它的網(wǎng)站上有使用BTrace進(jìn)行性能監(jiān)視步责、定位連接泄漏和內(nèi)存泄漏拔疚、解決多線程競爭問題等例子。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末恤左,一起剝皮案震驚了整個(gè)濱河市贴唇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌飞袋,老刑警劉巖滤蝠,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異授嘀,居然都是意外死亡物咳,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進(jìn)店門蹄皱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來览闰,“玉大人,你說我怎么就攤上這事巷折⊙辜” “怎么了?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵锻拘,是天一觀的道長油吭。 經(jīng)常有香客問我击蹲,道長,這世上最難降的妖魔是什么婉宰? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任歌豺,我火速辦了婚禮,結(jié)果婚禮上心包,老公的妹妹穿的比我還像新娘类咧。我一直安慰自己,他們只是感情好蟹腾,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布痕惋。 她就那樣靜靜地躺著,像睡著了一般娃殖。 火紅的嫁衣襯著肌膚如雪值戳。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天炉爆,我揣著相機(jī)與錄音堕虹,去河邊找鬼。 笑死叶洞,一個(gè)胖子當(dāng)著我的面吹牛鲫凶,可吹牛的內(nèi)容都是我干的禀崖。 我是一名探鬼主播衩辟,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼波附!你這毒婦竟也來了艺晴?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤掸屡,失蹤者是張志新(化名)和其女友劉穎封寞,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體仅财,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡狈究,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了盏求。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片抖锥。...
    茶點(diǎn)故事閱讀 40,664評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖碎罚,靈堂內(nèi)的尸體忽然破棺而出磅废,到底是詐尸還是另有隱情,我是刑警寧澤荆烈,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布拯勉,位于F島的核電站竟趾,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏宫峦。R本人自食惡果不足惜岔帽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望斗遏。 院中可真熱鬧山卦,春花似錦、人聲如沸诵次。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽逾一。三九已至铸本,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間遵堵,已是汗流浹背箱玷。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留陌宿,地道東北人锡足。 一個(gè)月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像壳坪,于是被迫代替她去往敵國和親舶得。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評論 2 359

推薦閱讀更多精彩內(nèi)容