JVM常用命令之-----jmap

Jamp

1、命令基本概述
Jmap是一個(gè)可以輸出所有內(nèi)存中對(duì)象的工具,甚至可以將VM 中的heap,以二進(jìn)制輸出成文本捣炬。打印出某個(gè)java進(jìn)程(使用pid)內(nèi)存內(nèi)的,所有‘對(duì)象’的情況(如:產(chǎn)生那些對(duì)象绽榛,及其數(shù)量)湿酸。

使用方法 jmap -histo pid。如果使用SHELL ,可采用jmap -histo pid>a.log日志將其保存到文件中灭美,在一段時(shí)間后推溃,使用文本對(duì)比工具,可以對(duì)比出GC回收了哪些對(duì)象届腐。jmap -dump:format=b,file=outfile 3024可以將3024進(jìn)程的內(nèi)存heap輸出出來(lái)到outfile文件里铁坎,再配合MAT(內(nèi)存分析工具)。

64位機(jī)上使用需要使用如下方式:
jmap -J-d64 -heap pid

2犁苏、命令格式
l jmap [ option ] pid
l jmap [ option ] executable core
l jmap [ option ] [server-id@]remote-hostname-or-IP

3硬萍、參數(shù)說(shuō)明
1)、options:
l executable :產(chǎn)生core dump的java可執(zhí)行程序;
l core 將被打印信息的core dump文件;
l remote-hostname-or-IP 遠(yuǎn)程debug服務(wù)的主機(jī)名或ip;
l server-id 唯一id,假如一臺(tái)主機(jī)上多個(gè)遠(yuǎn)程debug服務(wù);

2)围详、基本參數(shù):
? -dump:[live,]format=b,file=<filename> 使用hprof二進(jìn)制形式,輸出jvm的heap內(nèi)容到文件=. live子選項(xiàng)是可選的朴乖,假如指定live選項(xiàng),那么只輸出活的對(duì)象到文件.
$jmap–dump:live,format=b,file=aaa.bin 3772

? -finalizerinfo 打印正等候回收的對(duì)象的信息
$jmap -finalizerinfo 3772

| Attaching to process ID 3772, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 20.0-b11
Number of objects pending for finalization: 0 (等候回收的對(duì)象為0個(gè))

|? -heap 打印heap的概要信息祖屏,GC使用的算法,heap的配置及wise heap的使用情況.
$jmap –heap 3772

| using parallel threads in the new generation. ##新生代采用的是并行線(xiàn)程處理方式
using thread-local object allocation.
Concurrent Mark-Sweep GC ##同步并行垃圾回收
Heap Configuration: ##堆配置情況
MinHeapFreeRatio = 40 ##最小堆使用比例
MaxHeapFreeRatio = 70 ##最大堆可用比例
MaxHeapSize = 2147483648 (2048.0MB) ##最大堆空間大小
NewSize = 268435456 (256.0MB) ##新生代分配大小
MaxNewSize = 268435456 (256.0MB) ##最大可新生代分配大小
OldSize = 5439488 (5.1875MB) ##老生代大小
NewRatio = 2 ##新生代比例
SurvivorRatio = 8 ##新生代與suvivor的比例
PermSize = 134217728 (128.0MB) ##perm區(qū)大小
MaxPermSize = 134217728 (128.0MB) ##最大可分配perm區(qū)大小
Heap Usage: ##堆使用情況
New Generation (Eden + 1 Survivor Space): ##新生代(伊甸區(qū) + survior空間)
capacity = 241631232 (230.4375MB) ##伊甸區(qū)容量
used = 77776272 (74.17323303222656MB) ##已經(jīng)使用大小
free = 163854960 (156.26426696777344MB) ##剩余容量
32.188004570534986% used ##使用比例
Eden Space: ##伊甸區(qū)
capacity = 214827008 (204.875MB) ##伊甸區(qū)容量
used = 74442288 (70.99369812011719MB) ##伊甸區(qū)使用
free = 140384720 (133.8813018798828MB) ##伊甸區(qū)當(dāng)前剩余容量
34.65220164496263% used ##伊甸區(qū)使用情況
From Space: ##survior1區(qū)
capacity = 26804224 (25.5625MB) ##survior1區(qū)容量
used = 3333984 (3.179534912109375MB) ##surviror1區(qū)已使用情況
free = 23470240 (22.382965087890625MB) ##surviror1區(qū)剩余容量
12.43827838477995% used ##survior1區(qū)使用比例
To Space: ##survior2 區(qū)
capacity = 26804224 (25.5625MB) ##survior2區(qū)容量
used = 0 (0.0MB) ##survior2區(qū)已使用情況
free = 26804224 (25.5625MB) ##survior2區(qū)剩余容量
0.0% used ## survior2區(qū)使用比例
concurrent mark-sweep generation: ##老生代使用情況
capacity = 1879048192 (1792.0MB) ##老生代容量
used = 30847928 (29.41887664794922MB) ##老生代已使用容量
free = 1848200264 (1762.5811233520508MB) ##老生代剩余容量
1.6416783843721663% used ##老生代使用比例
Perm Generation: ##perm區(qū)使用情況
capacity = 134217728 (128.0MB) ##perm區(qū)容量
used = 47303016 (45.111671447753906MB) ##perm區(qū)已使用容量
free = 86914712 (82.8883285522461MB) ##perm區(qū)剩余容量
35.24349331855774% used ##perm區(qū)使用比例|

? -histo[:live] 打印每個(gè)class的實(shí)例數(shù)目,內(nèi)存占用,類(lèi)全名信息. VM的內(nèi)部類(lèi)名字開(kāi)頭會(huì)加上前綴”*”. 如果live子參數(shù)加上后,只統(tǒng)計(jì)活的對(duì)象數(shù)量.
$jmap –histo:live 3772
| num #instances #bytes class name


1: 65220 9755240 <constMethodKlass>
2: 65220 8880384 <methodKlass>
3: 11721 8252112 [B
4: 6300 6784040 <constantPoolKlass>
5: 75224 6218208 [C
6: 93969 5163280 <symbolKlass>
7: 6300 4854440 <instanceKlassKlass>
8: 5482 4203152 <constantPoolCacheKlass>
9: 72097 2307104 java.lang.String
10: 15102 2289912 [I
11: 4089 2227728 <methodDataKlass>
12: 28887 1386576 org.apache.velocity.runtime.parser.Token
13: 6792 706368 java.lang.Class
14: 7445 638312 [Ljava.util.HashMapEntry; 15: 8770 607040 [S 16: 17802 569664 java.lang.ref.WeakReference 17: 9538 472688 [[I 18: 8439 470440 [Ljava.lang.Object; 19: 5168 454784 java.lang.reflect.Method 20: 12559 401888 java.util.HashMapEntry
21: 3730 358080 org.apache.velocity.runtime.parser.node.ASTReference
22: 4373 279872 org.apache.velocity.runtime.parser.node.ASTText
23: 463 270392 <objArrayKlassKlass>
24: 6695 267800 java.lang.ref.SoftReference
25: 5198 249504 java.util.HashMap
26: 2871 206712 org.apache.velocity.runtime.parser.node.ASTIdentifier
27: 7526 180624 org.apache.velocity.util.introspection.Info
28: 4441 177640 java.util.LinkedHashMapEntry 29: 5550 177600 java.util.concurrent.locks.ReentrantLockNonfairSync
30: 5723 175272 [Lorg.apache.velocity.runtime.parser.node.Node;
31: 4473 156904 [Ljava.lang.String;
32: 2773 155288 java.beans.MethodDescriptor
33: 6264 150336 java.util.ArrayList |

? -permstat 打印classload和jvm heap長(zhǎng)久層的信息. 包含每個(gè)classloader的名字,活潑性,地址,父classloader和加載的class數(shù)量. 另外,內(nèi)部String的數(shù)量和占用內(nèi)存數(shù)也會(huì)打印出來(lái).
$jmap -permstat 3772

| class_loader classes bytes parent_loader alive? type
<bootstrap> 2172 13144040 null live <internal>
0x00000007882d7ab8 0 0 0x0000000788106c00 dead java/util/ResourceBundle$RBClassLoader@0x00000007f83b0388
0x0000000788c15ca8 1 3136 0x00000007880213d8 dead sun/reflect/DelegatingClassLoader@0x00000007f80686e0
0x0000000788fb1718 1 1968 0x00000007880213d8 dead sun/reflect/DelegatingClassLoader@0x00000007f80686e0
0x00000007882d0f08 1 2008 0x00000007880213d8 dead sun/reflect/DelegatingClassLoader@0x00000007f80686e0
0x0000000788176c60 1 3112 0x00000007880213d8 dead sun/reflect/DelegatingClassLoader@0x00000007f80686e0
0x0000000788a7e018 1 3144 0x00000007880213d8 dead sun/reflect/DelegatingClassLoader@0x00000007f80686e0
0x0000000788f515d0 1 1984 0x00000007880213d8 dead sun/reflect/DelegatingClassLoader@0x00000007f80686e0
0x000000078829a2c8 1 3112 0x00000007880213d8 dead sun/reflect/DelegatingClassLoader@0x00000007f80686e0
0x0000000788fab478 1 3128 null dead sun/reflect/DelegatingClassLoader@0x00000007f80686e0
0x0000000788030fd8 1 3112 0x00000007880213d8 dead sun/reflect/DelegatingClassLoader@0x00000007f80686e0
0x0000000788d46048 1 3144 0x00000007880213d8 dead sun/reflect/DelegatingClassLoader@0x00000007f80686e0
0x000000078816f6f0 1 3144 null dead sun/reflect/DelegatingClassLoader@0x00000007f80686e
0x0000000788c18850 1 3112 0x00000007880213d8 dead sun/reflect/DelegatingClassLoader@0x00000007f80686e0 |

? -F 強(qiáng)迫.在pid沒(méi)有相應(yīng)的時(shí)候使用-dump或者-histo參數(shù). 在這個(gè)模式下,live子參數(shù)無(wú)效.
? -h | -help 打印輔助信息
? -J 傳遞參數(shù)給jmap啟動(dòng)的jvm.

參考文獻(xiàn):
[http://docs.oracle.com/javase/6/docs/technotes/tools/share/jmap.html]
http://blog.csdn.net/fenglibing/article/details/6411953

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末买羞,一起剝皮案震驚了整個(gè)濱河市袁勺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌畜普,老刑警劉巖期丰,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異吃挑,居然都是意外死亡钝荡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)儒鹿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)化撕,“玉大人,你說(shuō)我怎么就攤上這事约炎。” “怎么了蟹瘾?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵圾浅,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我憾朴,道長(zhǎng)狸捕,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任众雷,我火速辦了婚禮灸拍,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘砾省。我一直安慰自己鸡岗,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布编兄。 她就那樣靜靜地躺著轩性,像睡著了一般。 火紅的嫁衣襯著肌膚如雪狠鸳。 梳的紋絲不亂的頭發(fā)上揣苏,一...
    開(kāi)封第一講書(shū)人閱讀 52,394評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音件舵,去河邊找鬼卸察。 笑死,一個(gè)胖子當(dāng)著我的面吹牛铅祸,可吹牛的內(nèi)容都是我干的坑质。 我是一名探鬼主播,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼洪乍!你這毒婦竟也來(lái)了眯杏?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤壳澳,失蹤者是張志新(化名)和其女友劉穎岂贩,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體巷波,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡萎津,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了抹镊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锉屈。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖垮耳,靈堂內(nèi)的尸體忽然破棺而出颈渊,到底是詐尸還是另有隱情,我是刑警寧澤终佛,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布俊嗽,位于F島的核電站,受9級(jí)特大地震影響铃彰,放射性物質(zhì)發(fā)生泄漏绍豁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一牙捉、第九天 我趴在偏房一處隱蔽的房頂上張望竹揍。 院中可真熱鬧,春花似錦邪铲、人聲如沸芬位。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)晶衷。三九已至,卻和暖如春阴孟,著一層夾襖步出監(jiān)牢的瞬間晌纫,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工永丝, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留锹漱,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓慕嚷,卻偏偏與公主長(zhǎng)得像哥牍,于是被迫代替她去往敵國(guó)和親毕泌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359

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