jvm系列(七):jvm調(diào)優(yōu)-工具篇

?16年的時(shí)候花了一些時(shí)間整理了一些關(guān)于jvm的介紹文章,到現(xiàn)在回顧起來(lái)還是一些還沒有補(bǔ)充全面,其中就包括如何利用工具來(lái)監(jiān)控調(diào)優(yōu)前后的性能變化。工具做為圖形化界面來(lái)展示更能直觀的發(fā)現(xiàn)問(wèn)題,另一方面一些耗費(fèi)性能的分析(dump文件分析)一般也不會(huì)在生產(chǎn)直接分析,往往dump下來(lái)的文件達(dá)1G左右聘萨,人工分析效率較低,因此利用工具來(lái)分析jvm相關(guān)問(wèn)題朦促,長(zhǎng)長(zhǎng)可以到達(dá)事半功倍的效果來(lái)膝晾。

jvm監(jiān)控分析工具一般分為兩類,一種是jdk自帶的工具务冕,一種是第三方的分析工具血当。jdk自帶工具一般在jdk bin目錄下面,以exe的形式直接點(diǎn)擊就可以使用禀忆,其中包含分析工具已經(jīng)很強(qiáng)大臊旭,幾乎涉及了方方面面,但是我們最常使用的只有兩款:jconsole.exe和jvisualvm.exe箩退;第三方的分析工具有很多离熏,各自的側(cè)重點(diǎn)不同,比較有代表性的:MAT(Memory Analyzer Tool)戴涝、GChisto等滋戳。

對(duì)于大型 JAVA 應(yīng)用程序來(lái)說(shuō),再精細(xì)的測(cè)試也難以堵住所有的漏洞啥刻,即便我們?cè)跍y(cè)試階段進(jìn)行了大量卓有成效的工作胧瓜,很多問(wèn)題還是會(huì)在生產(chǎn)環(huán)境下暴露出來(lái),并且很難在測(cè)試環(huán)境中進(jìn)行重現(xiàn)郑什。JVM 能夠記錄下問(wèn)題發(fā)生時(shí)系統(tǒng)的部分運(yùn)行狀態(tài)府喳,并將其存儲(chǔ)在堆轉(zhuǎn)儲(chǔ) (Heap Dump) 文件中,從而為我們分析和診斷問(wèn)題提供了重要的依據(jù)蘑拯。其中VisualVM和MAT是dump文件的分析利器钝满。

jdk自帶的工具

jconsole

Jconsole(Java Monitoring and Management Console)是從java5開始,在JDK中自帶的java監(jiān)控和管理控制臺(tái)申窘,用于對(duì)JVM中內(nèi)存弯蚜,線程和類等的監(jiān)控,是一個(gè)基于JMX(java management extensions)的GUI性能監(jiān)測(cè)工具剃法。jconsole使用jvm的擴(kuò)展機(jī)制獲取并展示虛擬機(jī)中運(yùn)行的應(yīng)用程序的性能和資源消耗等信息碎捺。

直接在jdk/bin目錄下點(diǎn)擊jconsole.exe即可啟動(dòng),界面如下:

在彈出的框中可以選擇本機(jī)的監(jiān)控本機(jī)的java應(yīng)用贷洲,也可以選擇遠(yuǎn)程的java服務(wù)來(lái)監(jiān)控收厨,如果監(jiān)控遠(yuǎn)程服務(wù)需要在tomcat啟動(dòng)腳本中添加如下代碼:

?-Dcom.sun.management.jmxremote.port=6969 ?

?-Dcom.sun.management.jmxremote.ssl=false ?

?-Dcom.sun.management.jmxremote.authenticate=false

連接進(jìn)去之后,就可以看到j(luò)console概覽圖和主要的功能:概述优构、內(nèi)存诵叁、線程、類钦椭、VM拧额、MBeans

概述碑诉,以圖表的方式顯示出堆內(nèi)存使用量,活動(dòng)線程數(shù)侥锦,已加載的類进栽,CUP占用率的折線圖,可以非常清晰的觀察在程序執(zhí)行過(guò)程中的變動(dòng)情況恭垦。

內(nèi)存快毛,主要展示了內(nèi)存的使用情況,同時(shí)可以查看堆和非堆內(nèi)存的變化值對(duì)比署照,也可以點(diǎn)擊執(zhí)行GC來(lái)處罰GC的執(zhí)行

線程,主界面展示線程數(shù)的活動(dòng)數(shù)和峰值吗浩,同時(shí)點(diǎn)擊左下方線程可以查看線程的詳細(xì)信息建芙,比如線程的狀態(tài)是什么,堆棧內(nèi)容等懂扼,同時(shí)也可以點(diǎn)擊“檢測(cè)死鎖”來(lái)檢查線程之間是否有死鎖的情況禁荸。

類,主要展示已加載類的相關(guān)信息阀湿。

VM 概要赶熟,展示JVM所有信息總覽,包括基本信息陷嘴、線程相關(guān)映砖、堆相關(guān)、操作系統(tǒng)灾挨、VM參數(shù)等邑退。

Mbean,查看Mbean的屬性,方法等劳澄。

VisualVM

簡(jiǎn)介

VisualVM 是一個(gè)工具地技,它提供了一個(gè)可視界面,用于查看 Java 虛擬機(jī) (Java Virtual Machine, JVM) 上運(yùn)行的基于 Java 技術(shù)的應(yīng)用程序(Java 應(yīng)用程序)的詳細(xì)信息秒拔。VisualVM 對(duì) Java Development Kit (JDK) 工具所檢索的 JVM 軟件相關(guān)數(shù)據(jù)進(jìn)行組織莫矗,并通過(guò)一種使您可以快速查看有關(guān)多個(gè) Java 應(yīng)用程序的數(shù)據(jù)的方式提供該信息。您可以查看本地應(yīng)用程序以及遠(yuǎn)程主機(jī)上運(yùn)行的應(yīng)用程序的相關(guān)數(shù)據(jù)砂缩。此外作谚,還可以捕獲有關(guān) JVM 軟件實(shí)例的數(shù)據(jù),并將該數(shù)據(jù)保存到本地系統(tǒng)庵芭,以供后期查看或與其他用戶共享食磕。

VisualVM 是javajdk自帶的最牛逼的調(diào)優(yōu)工具了吧,也是我平時(shí)使用最多調(diào)優(yōu)工具喳挑,幾乎涉及了jvm調(diào)優(yōu)的方方面面彬伦。同樣是在jdk/bin目錄下面雙擊jvisualvm.exe既可使用滔悉,啟動(dòng)起來(lái)后和jconsole 一樣同樣可以選擇本地和遠(yuǎn)程,如果需要監(jiān)控遠(yuǎn)程同樣需要配置相關(guān)參數(shù)单绑,主界面如下回官;

VisualVM可以根據(jù)需要安裝不同的插件,每個(gè)插件的關(guān)注點(diǎn)都不同搂橙,有的主要監(jiān)控GC歉提,有的主要監(jiān)控內(nèi)存,有的監(jiān)控線程等区转。

如何安裝:

1苔巨、從主菜單中選擇“工具”>“插件”。

2废离、在“可用插件”標(biāo)簽中侄泽,選中該插件的“安裝”復(fù)選框。單擊“安裝”蜻韭。

3悼尾、逐步完成插件安裝程序。

我這里以 Eclipse(pid 22296)為例肖方,雙擊后直接展開闺魏,主界面展示了系統(tǒng)和jvm兩大塊內(nèi)容,點(diǎn)擊右下方j(luò)vm參數(shù)和系統(tǒng)屬性可以參考詳細(xì)的參數(shù)信息.

因?yàn)閂isualVM的插件太多俯画,我這里主要介紹三個(gè)我主要使用幾個(gè):監(jiān)控析桥、線程、Visual GC

監(jiān)控的主頁(yè)其實(shí)也就是艰垂,cpu烹骨、內(nèi)存、類材泄、線程的圖表

線程和jconsole功能沒有太大的區(qū)別

Visual GC 是常常使用的一個(gè)功能沮焕,可以明顯的看到年輕代、老年代的內(nèi)存變化拉宗,以及gc頻率峦树、gc的時(shí)間等。

以上的功能其實(shí)jconsole幾乎也有旦事,VisualVM更全面更直觀一些魁巩,另外VisualVM非常多的其它功能,可以分析dump的內(nèi)存快照姐浮,dump出來(lái)的線程快照并且進(jìn)行分析等谷遂,還有其它很多的插件大家可以去探索

第三方調(diào)優(yōu)工具

MAT

MAT是什么?

MAT(Memory Analyzer Tool)卖鲤,一個(gè)基于Eclipse的內(nèi)存分析工具肾扰,是一個(gè)快速畴嘶、功能豐富的Java heap分析工具,它可以幫助我們查找內(nèi)存泄漏和減少內(nèi)存消耗集晚。使用內(nèi)存分析工具從眾多的對(duì)象中進(jìn)行分析窗悯,快速的計(jì)算出在內(nèi)存中對(duì)象的占用大小,看看是誰(shuí)阻止了垃圾收集器的回收工作偷拔,并可以通過(guò)報(bào)表直觀的查看到可能造成這種結(jié)果的對(duì)象蒋院。

通常內(nèi)存泄露分析被認(rèn)為是一件很有難度的工作,一般由團(tuán)隊(duì)中的資深人士進(jìn)行莲绰。不過(guò)要介紹的 MAT(Eclipse Memory Analyzer)被認(rèn)為是一個(gè)“傻瓜式“的堆轉(zhuǎn)儲(chǔ)文件分析工具欺旧,你只需要輕輕點(diǎn)擊一下鼠標(biāo)就可以生成一個(gè)專業(yè)的分析報(bào)告。和其他內(nèi)存泄露分析工具相比蛤签,MAT 的使用非常容易辞友,基本可以實(shí)現(xiàn)一鍵到位,即使是新手也能夠很快上手使用顷啼。

MAT以eclipse 插件的形式來(lái)安裝踏枣,具體的安裝過(guò)程就不在描述了昌屉,可以利用visualvm或者是 jmap命令生產(chǎn)堆文件钙蒙,導(dǎo)入eclipse mat中生成分析報(bào)告:

生產(chǎn)這會(huì)報(bào)表的同時(shí)也會(huì)在dump文件的同級(jí)目錄下生成三份(dump_Top_Consumers.zip、dump_Leak_Suspects.zip间驮、dump_Top_Components.zip)分析結(jié)果的html文件躬厌,方便發(fā)送給相關(guān)同事來(lái)查看。

需要關(guān)注的是下面的Actions竞帽、Reports扛施、Step by Step區(qū)域:

Histogram:列出內(nèi)存中的對(duì)象,對(duì)象的個(gè)數(shù)以及大小屹篓,支持正則表達(dá)式查找疙渣,也可以計(jì)算出該類所有對(duì)象的retained size

Dominator Tree:列出最大的對(duì)象以及其依賴存活的Object (大小是以Retained Heap為標(biāo)準(zhǔn)排序的)

Top Consumers :?通過(guò)圖形列出最大的object

duplicate classes :檢測(cè)由多個(gè)類裝載器加載的類

Leak Suspects :內(nèi)存泄漏分析

Top Components: 列出大于總堆數(shù)的百分之1的報(bào)表。

Component Report:分析對(duì)象屬于同一個(gè)包或者被同一個(gè)類加載器加載

以上只是一個(gè)初級(jí)的介紹堆巧,mat還有更強(qiáng)大的使用妄荔,比如對(duì)比堆內(nèi)存,在生產(chǎn)環(huán)境中往往為了定位問(wèn)題谍肤,每隔幾分鐘dump出一下內(nèi)存快照啦租,隨后在對(duì)比不同時(shí)間的堆內(nèi)存的變化來(lái)發(fā)現(xiàn)問(wèn)題。

GChisto

GChisto是一款專業(yè)分析gc日志的工具荒揣,可以通過(guò)gc日志來(lái)分析:Minor GC篷角、full gc的時(shí)間、頻率等等系任,通過(guò)列表恳蹲、報(bào)表虐块、圖表等不同的形式來(lái)反應(yīng)gc的情況。雖然界面略顯粗糙阱缓,但是功能還是不錯(cuò)的非凌。

配置好本地的jdk環(huán)境之后,雙擊GChisto.jar,在彈出的輸入框中點(diǎn)擊 add 選擇gc.log日志

GC Pause Stats:可以查看GC 的次數(shù)荆针、GC的時(shí)間敞嗡、GC的開銷、最大GC時(shí)間和最小GC時(shí)間等航背,以及相應(yīng)的柱狀圖

GC Pause Distribution:查看GC停頓的詳細(xì)分布喉悴,x軸表示垃圾收集停頓時(shí)間,y軸表示是停頓次數(shù)玖媚。

GC Timeline:顯示整個(gè)時(shí)間線上的垃圾收集

不過(guò)這款工具已經(jīng)不再維護(hù)箕肃,不能識(shí)別最新jdk的日志文件。

gcviewer

GCViewer也是一款分析小工具今魔,用于可視化查看由Sun / Oracle, IBM, HP 和 BEA Java 虛擬機(jī)產(chǎn)生的垃圾收集器的日志勺像,gcviewer個(gè)人感覺顯示 的界面比較亂沒有GChisto更專業(yè)一些。

GC Easy

這是一個(gè)web工具,在線使用非常方便.

地址:?http://gceasy.io

進(jìn)入官網(wǎng)错森,講打包好的zip或者gz為后綴的壓縮包上傳吟宦,過(guò)一會(huì)就會(huì)拿到分析結(jié)果。

推薦使用此工具進(jìn)行g(shù)c分析涩维。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末殃姓,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子瓦阐,更是在濱河造成了極大的恐慌蜗侈,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件睡蟋,死亡現(xiàn)場(chǎng)離奇詭異踏幻,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)戳杀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門该面,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人豺瘤,你說(shuō)我怎么就攤上這事吆倦。” “怎么了坐求?”我有些...
    開封第一講書人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵蚕泽,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng)须妻,這世上最難降的妖魔是什么仔蝌? 我笑而不...
    開封第一講書人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮荒吏,結(jié)果婚禮上敛惊,老公的妹妹穿的比我還像新娘。我一直安慰自己绰更,他們只是感情好瞧挤,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著儡湾,像睡著了一般特恬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上徐钠,一...
    開封第一講書人閱讀 49,749評(píng)論 1 289
  • 那天癌刽,我揣著相機(jī)與錄音,去河邊找鬼尝丐。 笑死显拜,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的爹袁。 我是一名探鬼主播远荠,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼呢簸!你這毒婦竟也來(lái)了矮台?” 一聲冷哼從身側(cè)響起乏屯,我...
    開封第一講書人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤根时,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后辰晕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蛤迎,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年含友,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了替裆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡窘问,死狀恐怖辆童,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情惠赫,我是刑警寧澤把鉴,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響庭砍,放射性物質(zhì)發(fā)生泄漏场晶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一怠缸、第九天 我趴在偏房一處隱蔽的房頂上張望诗轻。 院中可真熱鬧,春花似錦揭北、人聲如沸扳炬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)鞠柄。三九已至,卻和暖如春嫉柴,著一層夾襖步出監(jiān)牢的瞬間厌杜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工计螺, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留夯尽,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓登馒,卻偏偏與公主長(zhǎng)得像匙握,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子陈轿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

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

  • 東君攜月下天關(guān)圈纺, 凡塵新春此初圓。 燈猜謎風(fēng)拂稔歲麦射, 節(jié)押雨水潤(rùn)豐年蛾娶。 華彩流光萬(wàn)星掛, 銀輝夜色一月牽潜秋。 千里鄉(xiāng)...
    意禪_3553閱讀 238評(píng)論 0 1
  • 全課程的一天是不一樣的蛔琅,晨熙開啟,還未初醒的我們?cè)趲孜缓盏聦W(xué)校的老師帶領(lǐng)下開始了晨讀峻呛。唐詩(shī)我們都讀過(guò)罗售,無(wú)論是美麗的...
    琴弦上的精靈閱讀 792評(píng)論 0 3
  • 新媒體小白|掌握好這四個(gè)點(diǎn),輕松學(xué)會(huì)選擇項(xiàng)目 男怕入錯(cuò)行钩述,女怕嫁錯(cuò)郎寨躁,新媒體運(yùn)營(yíng)師怕選錯(cuò)項(xiàng)目。隨著網(wǎng)絡(luò)技術(shù)的發(fā)展牙勘,...
    依貝的異想世界閱讀 146評(píng)論 0 0