jmap命令的實現(xiàn)原理解析

簡書 占小狼,轉載請注明原創(chuàng)出處露该,謝謝睬棚!

當服務發(fā)生GC問題時,一般會使用jmap工具進行分析解幼,jmap工具很強大抑党,所以有必要了解它的方方面面。

jmap可以做什么撵摆?

1底靠、jmap -histo[:live] <pid>

通過histo選項,打印當前java堆中各個對象的數(shù)量特铝、大小暑中。
如果添加了live,只會打印活躍的對象鲫剿。

2鳄逾、jmap -dump:[live,]format=b,file=<filename> <pid>

通過-dump選項,把java堆中的對象dump到本地文件灵莲,然后使用MAT進行分析雕凹。
如果添加了live,只會dump活躍的對象政冻。

3枚抵、jmap -heap <pid>

通過-heap選項,打印java堆的配置情況和使用情況赠幕,還有使用的GC算法俄精。

4询筏、jmap -finalizerinfo <pid>

通過-finalizerinfo選項榕堰,打印那些正在等待執(zhí)行finalize方法的對象。

5嫌套、jmap -permstat <pid>

通過-permstat選項逆屡,打印java堆永久代的信息,包括class loader相關的信息,和interned Strings的信息踱讨。

jmap實現(xiàn)原理

通過jmap和jvm之間進行通信魏蔗,有兩種實現(xiàn)方式:attach 和 SA。

attach

attach方式痹筛,簡單來說就是客戶端和服務端之間的通信莺治,客戶端發(fā)送請求廓鞠,主要邏輯在服務端執(zhí)行,jmap相當于客戶端谣旁,JVM相當于服務端床佳。

在JVM中,有一個叫"Attach Listener"的線程榄审,專門負責監(jiān)聽attach的請求砌们,并執(zhí)行對應的操作。

比如現(xiàn)在執(zhí)行"jmap -histo:live 5409"搁进,一步一步的實現(xiàn)如下:
1浪感、在Jmap.java類的main函數(shù)中,對參數(shù)進行解析饼问。
2影兽、解析出來參數(shù)中有“-histo:live”,則執(zhí)行histo方法:

attach方法建立了jmap進程和JVM之間的socket連接匆瓜,建立過程可以查看笨神的文章JVM Attach機制實現(xiàn)赢笨,后續(xù)基于該連接進行通信。

因為命令行中添加了[:live]選項驮吱,這里的live參數(shù)是true茧妒。

再看看heapHisto方法

executeCommand方法基于之前的socket連接向JVM發(fā)送了一條"inspectheap"命令,當然了左冬,還有參數(shù)桐筏。

虛擬機的"Attach Listener"線程當發(fā)現(xiàn)有新的命令時,就拿出來處理它拇砰。

命令和具體的函數(shù)對應關系如下:

和"inspectheap"對應的是heap_inspection方法梅忌,實現(xiàn)如下:

live_objects_only的值取決于請求中是否有"-live",再jmap中除破,取決于是否有":live"牧氮,所以不管是不是添加了":live",都會有STW過程瑰枫,時間長短而已踱葛。

在VM_GC_HeapInspection的doit方法中

_full_gc的值就是live_objects_only,如果為true光坝,可能會執(zhí)行一次full gc尸诽,清空非活躍的對象,但是可能會因為GC locker盯另,導致跳過本次的GC性含。

"jmap -dump"實現(xiàn)的原理和"jmap -histo"類似,都是通過attach的方式實現(xiàn)鸳惯,
attach API的實現(xiàn)方式是:
1商蕴、客戶端連接到目標JVM叠萍,向其發(fā)出一個類似“inspectheap”命令;
2绪商、目標JVM接收到命令俭令,執(zhí)行JVM內相關函數(shù),將收集到的結果以文本形式返回部宿;
3抄腔、客戶端接收到返回的文本并將其顯示出來;

SA

假如執(zhí)行"jmap -heap 5409"理张,就不會使用attach方式實現(xiàn)了赫蛇。

在參數(shù)解析中,如果參數(shù)是"-heap|-heap:format=b|-permstat|-finalizerinfo"中的一種雾叭,或者添加了"-F"悟耘,比如"jmap -histo -F 5409",則使用SA的方式织狐。

SA方式暂幼,和attach方式不同的是,相關的主要邏輯都在SA中實現(xiàn)移迫,從JVM中獲取數(shù)據(jù)即可旺嬉。

可以大概看下"jmap -heap"的實現(xiàn),對應的實現(xiàn)類是"HeapSummary"厨埋,內部通過BugSpotAgent工具類attach到目標VM邪媳,更具體的底層細節(jié),可以參考HotSpot Serviceability Agent 實現(xiàn)淺析

執(zhí)行jmap -heap有些時候可能會導致進程變T荡陷,一般是有一個線程在等信號量雨效,這時會block住其它所有線程,可以執(zhí)行kill -CONT <pid>進行恢復废赞,不過還是強烈建議別執(zhí)行這個命令徽龟。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市唉地,隨后出現(xiàn)的幾起案子据悔,更是在濱河造成了極大的恐慌,老刑警劉巖渣蜗,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件屠尊,死亡現(xiàn)場離奇詭異旷祸,居然都是意外死亡耕拷,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門托享,熙熙樓的掌柜王于貴愁眉苦臉地迎上來骚烧,“玉大人浸赫,你說我怎么就攤上這事≡甙恚” “怎么了既峡?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長碧查。 經(jīng)常有香客問我运敢,道長,這世上最難降的妖魔是什么忠售? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任传惠,我火速辦了婚禮,結果婚禮上稻扬,老公的妹妹穿的比我還像新娘卦方。我一直安慰自己,他們只是感情好泰佳,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布盼砍。 她就那樣靜靜地躺著,像睡著了一般逝她。 火紅的嫁衣襯著肌膚如雪浇坐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天黔宛,我揣著相機與錄音吗跋,去河邊找鬼。 笑死宁昭,一個胖子當著我的面吹牛跌宛,可吹牛的內容都是我干的。 我是一名探鬼主播积仗,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼疆拘,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了寂曹?” 一聲冷哼從身側響起哎迄,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎隆圆,沒想到半個月后漱挚,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡渺氧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年旨涝,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片侣背。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡白华,死狀恐怖慨默,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情弧腥,我是刑警寧澤厦取,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站管搪,受9級特大地震影響虾攻,放射性物質發(fā)生泄漏。R本人自食惡果不足惜更鲁,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一台谢、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧岁经,春花似錦朋沮、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至塘慕,卻和暖如春筋夏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背图呢。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工条篷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蛤织。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓赴叹,卻偏偏與公主長得像,于是被迫代替她去往敵國和親指蚜。 傳聞我的和親對象是個殘疾皇子乞巧,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345