jmap (linuxä¸ç¹æï¼ä¹æ¯å¾å¸¸ç¨çä¸ä¸ªå½ä»¤)
è§å¯è¿è¡ä¸çjvmç©çå
åçå ç¨æ
åµã
åæ°å¦ä¸ï¼
-heap ï¼æå°jvm heapçæ
åµ
-histoï¼ æå°jvm heapçç´æ¹å¾ãå
¶è¾åºä¿¡æ¯å
æ¬ç±»åï¼å¯¹è±¡æ°éï¼å¯¹è±¡å ç¨å¤§å°ã
-histoï¼live ï¼ åä¸ï¼ä½æ¯åªçåºå活对象çæ
åµ
-permstatï¼ æå°permanent generation heapæ
åµ
å½ä»¤ä½¿ç¨ï¼
jmap -heap 3409
å¯ä»¥è§å¯å°New Generation(Eden Spaceï¼From Spaceï¼To Space),tenured generation,Perm Generationçå
å使ç¨æ
åµ
è¾åºå
容ï¼
jmap -histo 3409 | jmap -histo:live 3409
å¯ä»¥è§å¯heapä¸ææ对象çæ
åµ(heapä¸ææçåç对象çæ
åµ)ãå
æ¬å¯¹è±¡æ°éåæå 空é´å¤§å°ã
è¾åºå
容ï¼
å个èæ¬ï¼å¯ä»¥å¾å¿«æå ç¨heapæ大ç对象æ¾åºæ¥ï¼å¯¹ä»å
åæ³æ¼ç¹å«ææã
å¦æç»æå¾å¤ï¼å¯ä»¥ç¨ä»¥ä¸å½ä»¤è¾åºå°ææ¬æ件ã
jmap -histo 3409 | jmap -histo:live 3409 > a.txt
jinfo:å¯ä»¥è¾åºå¹¶ä¿®æ¹è¿è¡æ¶çjava è¿ç¨çoptsã
jps:ä¸unixä¸çps类似ï¼ç¨æ¥æ¾ç¤ºæ¬å°çjavaè¿ç¨ï¼å¯ä»¥æ¥çæ¬å°è¿è¡çå 个javaç¨åºï¼å¹¶æ¾ç¤ºä»ä»¬çè¿ç¨å·ã
jstat:ä¸ä¸ªæ强ççè§VMå
åå·¥å
·ãå¯ä»¥ç¨æ¥çè§VMå
åå
çåç§å åéå ç大å°åå
¶å
å使ç¨éã
jmap:æå°åºæ个javaè¿ç¨(使ç¨pid)å
åå
çææ'对象'çæ
åµ(å¦ï¼äº§çé£äºå¯¹è±¡ï¼åå
¶æ°é)ã
jconsole:ä¸ä¸ªjava GUIçè§å·¥å
·ï¼å¯ä»¥ä»¥å¾è¡¨åçå½¢å¼æ¾ç¤ºåç§æ°æ®ã并å¯éè¿è¿ç¨è¿æ¥çè§è¿ç¨çæå¡å¨VMã
详ç»ï¼å¨ä½¿ç¨è¿äºå·¥å
·åï¼å
ç¨JPSå½ä»¤è·åå½åçæ¯ä¸ªJVMè¿ç¨å·ï¼ç¶åéæ©è¦æ¥ççJVMã
jstatå·¥å
·ç¹å«å¼ºå¤§ï¼æä¼å¤çå¯é项ï¼è¯¦ç»æ¥çå å
å个é¨åç使ç¨éï¼ä»¥åå 载类çæ°éã使ç¨æ¶ï¼éå ä¸æ¥çè¿ç¨çè¿ç¨idï¼åæéåæ°ã以ä¸è¯¦ç»ä»ç»å个åæ°çæä¹ã
jstat -class pid:æ¾ç¤ºå è½½classçæ°éï¼åæå 空é´çä¿¡æ¯ã
jstat -compiler pid:æ¾ç¤ºVMå®æ¶ç¼è¯çæ°éçä¿¡æ¯ã
jstat -gc pid:å¯ä»¥æ¾ç¤ºgcçä¿¡æ¯ï¼æ¥çgcç次æ°ï¼åæ¶é´ãå
¶ä¸æåäºé¡¹ï¼åå«æ¯young gcç次æ°ï¼young gcçæ¶é´ï¼full gcç次æ°ï¼full gcçæ¶é´ï¼gcçæ»æ¶é´ã
jstat -gccapacity:å¯ä»¥æ¾ç¤ºï¼VMå
åä¸ä¸ä»£(young,old,perm)对象ç使ç¨åå ç¨å¤§å°ï¼å¦ï¼PGCMNæ¾ç¤ºçæ¯æå°permçå
å使ç¨éï¼PGCMXæ¾ç¤ºçæ¯permçå
åæ大使ç¨éï¼PGCæ¯å½åæ°çæçpermå
åå ç¨éï¼PCæ¯ä½åpermå
åå ç¨éãå
¶ä»çå¯ä»¥æ ¹æ®è¿ä¸ªç±»æ¨ï¼ OCæ¯oldå
纯çå ç¨éã
jstat -gcnew pid:new对象çä¿¡æ¯ã
jstat -gcnewcapacity pid:new对象çä¿¡æ¯åå
¶å ç¨éã
jstat -gcold pid:old对象çä¿¡æ¯ã
jstat -gcoldcapacity pid:old对象çä¿¡æ¯åå
¶å ç¨éã
jstat -gcpermcapacity pid: perm对象çä¿¡æ¯åå
¶å ç¨éã
jstat -util pid:ç»è®¡gcä¿¡æ¯ç»è®¡ã
jstat -printcompilation pid:å½åVMæ§è¡çä¿¡æ¯ã
é¤äºä»¥ä¸ä¸ä¸ªåæ°å¤ï¼è¿å¯ä»¥åæ¶å ä¸ ä¸¤ä¸ªæ°åï¼å¦ï¼jstat -printcompilation 3024 250 6æ¯æ¯250毫ç§æå°ä¸æ¬¡ï¼ä¸å
±æå°6次ï¼è¿å¯ä»¥å ä¸-h3æ¯ä¸è¡æ¾ç¤ºä¸ä¸æ é¢ã
jmapæ¯ä¸ä¸ªå¯ä»¥è¾åºææå
åä¸å¯¹è±¡çå·¥å
·ï¼çè³å¯ä»¥å°VM ä¸çheapï¼ä»¥äºè¿å¶è¾åºæææ¬ã
å½ä»¤ï¼jmap -dump:format=b,file=heap.bin
fileï¼ä¿åè·¯å¾åæ件å
pidï¼è¿ç¨ç¼å·
?jmap -histo:live pid| less :å ä¸æ´»å¨ç对象以å大å°
?jmap -heap pid : æ¥çå ç使ç¨ç¶åµä¿¡æ¯
jinfo:çç¨å¤æ¯è¾ç®åï¼å°±æ¯è½è¾åºå¹¶ä¿®æ¹è¿è¡æ¶çjavaè¿ç¨çè¿è¡åæ°ãç¨æ³æ¯jinfo -opt pid å¦ï¼æ¥ç2788çMaxPerm大å°å¯ä»¥ç¨ jinfo -flag MaxPermSize 2788ã
jconsoleæ¯ä¸ä¸ªç¨javaåçGUIç¨åºï¼ç¨æ¥çæ§VMï¼å¹¶å¯çæ§è¿ç¨çVMï¼é常æç¨ï¼èä¸åè½é常强ã使ç¨æ¹æ³ï¼å½ä»¤è¡éæ jconsoleï¼éåè¿ç¨å°±å¯ä»¥äºã
JConsoleä¸å
³äºå
åååºç说æã
Eden Space (heap)ï¼ å
åæåä»è¿ä¸ªçº¿ç¨æ± åé
ç»å¤§é¨å对象ã
Survivor Space (heap)ï¼ç¨äºä¿åå¨eden spaceå
åæ± ä¸ç»è¿åå¾åæ¶å没æ被åæ¶ç对象ã
Tenured Generation (heap)ï¼ç¨äºä¿æå·²ç»å¨ survivor spaceå
åæ± ä¸åå¨äºä¸æ®µæ¶é´ç对象ã
Permanent Generation (non-heap): ä¿åèææºèªå·±çéæ(refective)æ°æ®ï¼ä¾å¦ç±»(class)åæ¹æ³(method)对象ãJavaèææºå
±äº«è¿äºç±»æ°æ®ãè¿ä¸ªåºå被åå²ä¸ºåªè¯»çååªåçï¼
Code Cache (non-heap):HotSpot Javaèææºå
æ¬ä¸ä¸ªç¨äºç¼è¯åä¿åæ¬å°ä»£ç (native code)çå
åï¼å«åâ代ç ç¼ååºâ(code cache)
?jstack ( æ¥çjvm线ç¨è¿è¡ç¶æï¼æ¯å¦ææ»éç°è±¡ççä¿¡æ¯) : jstack pid : thread dump
?jstat -gcutil pid 1000 100 : 1000msç»è®¡ä¸æ¬¡gcæ
åµç»è®¡100次;
å¦å¤æ¨èä¸æ¬¾æ¥çjmap dump çå
å对象工å
· MemoryAnalyzer
温馨提示:答案为网友推荐,仅供参考