天天看點

java jvm常用指令工具——jmap指令(Java Memory Map)

1.介紹

        列印出某個java程序(使用pid)記憶體内的所有‘對象’的情況(如:産生那些對象,及其數量)。

        可以輸出所有記憶體中對象的工具,甚至可以将VM 中的heap,以二進制輸出成文本。使用方法 jmap -histo pid。如果連用SHELL jmap -histo pid>a.log可以将其儲存到文本中去,在一段時間後,使用文本對比工具,可以對比出GC回收了哪些對象。jmap -dump:format=b,file=outfile 3024可以将3024程序的記憶體heap輸出出來到outfile檔案裡,再配合MAT(記憶體分析工具(Memory Analysis Tool),使用參見:MAT(Memory Analyzer Tool)工具入門介紹)或與jhat (Java Heap Analysis Tool)一起使用,能夠以圖像的形式直覺的展示目前記憶體是否有問題。

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

2.指令格式

        jmap [ option ] pid

        jmap [ option ] executable core

        jmap [ option ] [server-id@]remote-hostname-or-IP

3.參數說明

1).options

        executable Java executable from which the core dump was produced.(可能是産生core dump的java可執行程式)

        core 将被列印資訊的core dump檔案

        remote-hostname-or-IP 遠端debug服務的主機名或ip

        server-id 唯一id,假如一台主機上多個遠端debug服務 

2).基本參數

        -dump:[live,]format=b,file=<filename> 使用hprof二進制形式,輸出jvm的heap内容到檔案,live子選項是可選的,假如指定live選項,那麼隻輸出活的對象到檔案。 

        -finalizerinfo 列印正等候回收的對象的資訊。

        -heap 列印heap的概要資訊,GC使用的算法,heap的配置及wise heap的使用情況。

        -histo[:live] 列印每個class的執行個體數目,記憶體占用,類全名資訊. VM的内部類名字開頭會加上字首”*”. 如果live子參數加上後,隻統計活的對象數量。

        -permstat 列印classload和jvm heap長久層的資訊. 包含每個classloader的名字,活潑性,位址,父classloader和加載的class數量. 另外,内部String的數量和占用記憶體數也會列印出來。

        -F 強迫在pid沒有相應的時候使用-dump或者-histo參數,在這個模式下live子參數無效。

        -h | -help 列印輔助資訊 

        -J 傳遞參數給jmap啟動的jvm

        pid 需要被列印配相資訊的java程序id,可以用jps查詢

4.使用示例

1).jmap -histo 5644

java jvm常用指令工具——jmap指令(Java Memory Map)

2).jmap -dump:format=b,file=test.hprof 5644

java jvm常用指令工具——jmap指令(Java Memory Map)

文章來源:http://blog.csdn.net/fenglibing/article/details/6411953