Java飛行記錄器

參考地址1
參考地址2
最近做性能測試, 無法定位到問題, 故使用內(nèi)置的Java飛行記錄器:Java Mission Control.

一. 開啟流程如下:

在Linux服務(wù)器上:

1. 要檢查的服務(wù)的JDK要求:

  • JDK是1.8u44以上. 不需要配置參數(shù);
  • JDK是1.8以下, 需要配置: -XX:+UnlockCommercialFeatures -XX:+FlightRecorder

2. 啟動(dòng)服務(wù).

3. 開啟飛行記錄.

jcmd <pid> JFR.start delay=10s duration=15m filename=log.jfr
說明:

  • pid: 服務(wù)的進(jìn)程號. 使用ps -ef | grep java 查詢. (使用時(shí)去除尖括號)
  • delay: 延遲開啟配置. delay=10s 代表延遲10秒開啟.
  • duration: 指收集的日志時(shí)長. duration=15m, 代表收集15分鐘的JVM信息.
  • filename: 指將收集的日志存在指定的日志文件中. filename=log.jfr, 代表將收集的日志存放在log.jfr中.

二. JFR(Java Flight Recorder)

如何查看飛行記錄? 下面展示如何查看飛行記錄:

1. 常規(guī)選項(xiàng)卡

“常規(guī)”選項(xiàng)卡包含一些描述常規(guī)應(yīng)用程序的子選項(xiàng)卡惰爬,第一個(gè)子選項(xiàng)卡是Overview谎柄,它顯示了一些基本信息尚辑,如堆最大使用率,總CPU使用率和GC暫停時(shí)間糊余,如圖2-9 所示:

圖1-General

另外蚀乔,查看一段時(shí)間內(nèi)的CPU使用情況蒋纬,以及應(yīng)用程序使用情況和機(jī)器總數(shù)泊愧,當(dāng)應(yīng)用程序中出現(xiàn)問題時(shí),此選項(xiàng)卡就變得很有用官套。例如酒奶,關(guān)注CPU使用率接近100%或CPU使用率過低,過長的垃圾收集暫停時(shí)間奶赔。

其他子選項(xiàng)卡

  • JVM Information顯示JVM信息惋嚎。啟動(dòng)參數(shù).
  • “ 系統(tǒng)屬性”,顯示所有系統(tǒng)屬性設(shè)置.
  • “ 記錄”顯示有關(guān)特定記錄的信息站刑,例如:打開的事件另伍。單擊問號以獲取有關(guān)所有選項(xiàng)卡和子選項(xiàng)卡的內(nèi)置詳細(xì)信息。

2. 內(nèi)存選項(xiàng)卡

“內(nèi)存”選項(xiàng)卡包含有垃圾收集绞旅、分配模式和對象統(tǒng)計(jì)信息摆尝,此選項(xiàng)卡有助于調(diào)試內(nèi)存泄漏及調(diào)整GC。圖2-10檢查飛行記錄 - 垃圾收集

圖2-Memory

如圖2所示因悲,堆使用的尖峰模式完全正常堕汞。在大多數(shù)應(yīng)用程序中,始終分配臨時(shí)對象晃琳,滿足條件后讯检,將觸發(fā)垃圾收集(GC)并刪除不再使用的對象琐鲁。因此,堆使用量會(huì)穩(wěn)定增加人灼,直到GC被觸發(fā)围段,然后突然下降。

Java中的大多數(shù)GC都有一些較小的垃圾收集投放,old GC遍歷整個(gè)Java堆奈泪,而另一個(gè)GC可能會(huì)查看堆的一部分,old GC后的堆使用情況跪呈,是應(yīng)用程序正在使用的內(nèi)存段磨。

啟用堆統(tǒng)計(jì)信息生成的飛行記錄取逾,將以old GC開始和結(jié)束耗绿。在GCs列表中選擇old GC,然后砾隅,選擇General選項(xiàng)卡误阻,以查看GC原因——堆檢查啟動(dòng)GC。這些GC通常比其他GC要稍長一些晴埂。為了更好地處理內(nèi)存泄漏究反,請查看第一個(gè)和最后一個(gè)old GC之后的堆。當(dāng)這個(gè)值隨時(shí)間增加時(shí)儒洛,可能存在內(nèi)存泄漏精耐。

“GC時(shí)間”選項(xiàng)卡包含有關(guān)執(zhí)行GC所花費(fèi)的時(shí)間,以及應(yīng)用程序因GC而完全暫停的時(shí)間信息琅锻。該GC配置選項(xiàng)卡有GC的配置信息卦停。有關(guān)這些選項(xiàng)卡的更多詳細(xì)信息,請單擊右上角的問號以查看內(nèi)置幫助恼蓬。

分配選項(xiàng)卡: 圖3顯示了內(nèi)存分配選項(xiàng)惊完,Java中的小對象在TLAB(線程局部區(qū)域緩沖區(qū))中分配。TLAB是一個(gè)分配新對象的小內(nèi)存區(qū)域处硬。一旦TLAB滿了小槐,線程就會(huì)創(chuàng)建一個(gè)新的,所有觸發(fā)新TLAB的分配都被記錄下來荷辕。在TLAB之外分配較大的對象凿跳,這些對象也被記錄下來。圖3檢查飛行記錄 - 分配選項(xiàng)卡

圖3-Memory

要估計(jì)每個(gè)類的內(nèi)存分配疮方,在“新TLAB”選項(xiàng)卡中選擇“分配”控嗜,然后,選擇“分配”選項(xiàng)卡案站。這些分配是碰巧觸發(fā)新TLAB的對象分配躬审,char數(shù)組引發(fā)了最多的新TLABs棘街,分配多少內(nèi)存作為char數(shù)組是未知的,TLAB的大小是對char數(shù)組內(nèi)存分配的估計(jì)承边。

圖3是char數(shù)組的最大內(nèi)存分配示例遭殉,單擊其中一個(gè)類,以查看這些分配的堆棧跟蹤博助。示例記錄顯示险污,44%的分配壓力來自char數(shù)組,27%來自Array.copyOfRange富岳,StringBuilder.toString依次調(diào)用Throwable.printStackTrace和StackTraceElement.toString蛔糯,展開進(jìn)一步以了解這些方法是如何調(diào)用的。

注意:應(yīng)用程序分配的臨時(shí)對象越多窖式,應(yīng)用程序必須垃圾回收的越多蚁飒。“分配”選項(xiàng)卡可幫助找到最多的分配萝喘,并降低應(yīng)用程序中的GC壓力淮逻。查看TLAB選項(xiàng)卡外的Allocation,以查看大內(nèi)存分配阁簸,這通常比New TLAB選項(xiàng)卡中的分配爬早,具有更少的內(nèi)存壓力。

“對象統(tǒng)計(jì)”選項(xiàng)卡

“對象統(tǒng)計(jì)”選項(xiàng)卡顯示實(shí)時(shí)收集最多的類启妹。從Memory選項(xiàng)卡中讀取Garbage Collection子選項(xiàng)卡以了解實(shí)時(shí)GC筛严。圖3顯示了用于飛行記錄的堆統(tǒng)計(jì)信息。啟用飛行記錄的堆統(tǒng)計(jì)信息以顯示數(shù)據(jù)饶米,底部的“Top Growers”選項(xiàng)卡桨啃,顯示了在飛行記錄期間每種對象的增加情況,特定類型對象的數(shù)量增加咙崎,通常表示存在內(nèi)存泄漏优幸,但一個(gè)小的變化是正常的,特別是褪猛,研究非標(biāo)準(zhǔn)的Java類的top growers网杆。

圖4 檢查飛行記錄 - 對象統(tǒng)計(jì)選項(xiàng)卡

代碼選項(xiàng)卡

Code選項(xiàng)卡包含有關(guān)應(yīng)用程序,在何處花費(fèi)大部分時(shí)間的信息伊滋,在概述子選項(xiàng)卡顯示碳却,花費(fèi)最多執(zhí)行時(shí)間的包和類。這些數(shù)據(jù)來自抽樣笑旺,JFR采用間隔運(yùn)行的線程樣本昼浦。只對實(shí)際運(yùn)行代碼的線程進(jìn)行抽樣,不會(huì)顯示正在休眠筒主、等待鎖或I/O的線程关噪。要了解應(yīng)用程序時(shí)間的更多詳細(xì)信息鸟蟹,可以查看Hot Methods子選項(xiàng)卡。

圖5檢查飛行記錄 - 代碼選項(xiàng)卡

圖5顯示了采樣次數(shù)最多的方法使兔,展開這些示例建钥,以查看調(diào)用它們的位置。如果一個(gè)HashMap.getEntry調(diào)用很多虐沥,然后展開這個(gè)節(jié)點(diǎn)熊经,直到找到調(diào)用最多的方法。這是用于查找應(yīng)用程序瓶頸的最佳選項(xiàng)卡欲险。

“Call Tree”子選項(xiàng)卡:顯示相同的事件镐依,但從底部開始,例如天试,來自Thread.run槐壳。

Exceptions子選項(xiàng)卡:顯示發(fā)生的異常,默認(rèn)情況下秋秤,只記錄錯(cuò)誤宏粤,但在啟動(dòng)新記錄時(shí)更改此設(shè)置以包含所有異常。

Compilations子選項(xiàng)卡:顯示應(yīng)用程序運(yùn)行時(shí)實(shí)時(shí)編譯的方法灼卢。

Class Loading選項(xiàng)卡:顯示已加載的類的數(shù)量、實(shí)際加載的類和隨時(shí)間推移的卸載類来农,此子選項(xiàng)卡僅包含在錄制開始時(shí)鞋真,啟用“Class Loading”事件時(shí)所顯示的信息。

有關(guān)這些選項(xiàng)卡的更多詳細(xì)信息沃于,請單擊右上角的問號以查看內(nèi)置幫助涩咖。

線程選項(xiàng)卡

“線程”選項(xiàng)卡包含有關(guān)線程,鎖爭用和其他延遲的信息繁莹。

Overview 子選項(xiàng)卡:顯示了CPU的使用情況和隨著時(shí)間推移的線程數(shù)量檩互。

Hot Threads子選項(xiàng)卡:顯示執(zhí)行大部分代碼的線程,此信息與Code選項(xiàng)卡中的Hot Methods子選項(xiàng)卡使用相同的抽樣數(shù)據(jù)咨演。Contention爭用標(biāo)簽對于找到瓶頸非常有用闸昨。

圖6 檢查飛行記錄 - 爭用選項(xiàng)卡

圖6顯示了由于同步而最等待的對象。選擇一個(gè)Class以查看每個(gè)對象的等待時(shí)間的堆棧跟蹤薄风,這些暫停通常由同步方法引起饵较。注意:默認(rèn)情況下,僅記錄長度超過10毫秒的同步事件遭赂,但可以在開始錄制時(shí)設(shè)置此閾值循诉。

Latencies 子選項(xiàng)卡:顯示其他延遲源,例如撇他,調(diào)用sleep或wait茄猫、從socket讀取或等待文件I/O狈蚤。

Thread Dumps 子選項(xiàng)卡:顯示可以在記錄中觸發(fā)的周期性線程轉(zhuǎn)儲。

Lock Instances 子選項(xiàng)卡:顯示由于同步而等待最多的對象划纽。

有關(guān)這些選項(xiàng)卡的更多詳細(xì)信息炫惩,單擊右上角的問號以查看內(nèi)置幫助。

I/O選項(xiàng)卡

在I/O選項(xiàng)卡中顯示了文件讀取阿浓,文件寫入他嚷,socket讀取,socket寫入信息芭毙。這個(gè)選項(xiàng)卡根據(jù)應(yīng)用程序的不同而有所幫助筋蓖,特別是I/O操作時(shí)間很長時(shí)。

注意:認(rèn)情況下退敦,只顯示大于10毫秒的事件粘咖,在創(chuàng)建新記錄時(shí)可以修改閾值。

系統(tǒng)選項(xiàng)卡

“System”選項(xiàng)卡:提供有關(guān)運(yùn)行應(yīng)用程序的計(jì)算機(jī)的CPU侈百,內(nèi)存和操作系統(tǒng)的詳細(xì)信息瓮下。它還顯示環(huán)境變量,以及與JVM同時(shí)運(yùn)行的其他進(jìn)程钝域。

事件選項(xiàng)卡

“Events”選項(xiàng)卡:顯示錄制中的所有事件讽坏,這是一個(gè)高級選項(xiàng)卡,能夠以多種方式使用例证。有關(guān)這些選項(xiàng)卡的更多詳細(xì)信息路呜,單擊右上角的問號以查看內(nèi)置幫助。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末织咧,一起剝皮案震驚了整個(gè)濱河市胀葱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌笙蒙,老刑警劉巖抵屿,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異捅位,居然都是意外死亡轧葛,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門绿渣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來朝群,“玉大人,你說我怎么就攤上這事中符〗郑” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵淀散,是天一觀的道長右莱。 經(jīng)常有香客問我蚜锨,道長,這世上最難降的妖魔是什么慢蜓? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任亚再,我火速辦了婚禮,結(jié)果婚禮上晨抡,老公的妹妹穿的比我還像新娘氛悬。我一直安慰自己,他們只是感情好耘柱,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布如捅。 她就那樣靜靜地躺著,像睡著了一般调煎。 火紅的嫁衣襯著肌膚如雪镜遣。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天士袄,我揣著相機(jī)與錄音悲关,去河邊找鬼。 笑死娄柳,一個(gè)胖子當(dāng)著我的面吹牛寓辱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播西土,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼讶舰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了需了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤般甲,失蹤者是張志新(化名)和其女友劉穎肋乍,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體敷存,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡墓造,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了锚烦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片觅闽。...
    茶點(diǎn)故事閱讀 38,605評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖涮俄,靈堂內(nèi)的尸體忽然破棺而出蛉拙,到底是詐尸還是另有隱情,我是刑警寧澤彻亲,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布孕锄,位于F島的核電站吮廉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏畸肆。R本人自食惡果不足惜宦芦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望轴脐。 院中可真熱鬧调卑,春花似錦、人聲如沸大咱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽徽级。三九已至气破,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間餐抢,已是汗流浹背现使。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留旷痕,地道東北人碳锈。 一個(gè)月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像欺抗,于是被迫代替她去往敵國和親售碳。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評論 2 348

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