1. 程式人生 > >jmap命令詳解(轉)

jmap命令詳解(轉)

1、命令基本概述

Jmap是一個可以輸出所有記憶體中物件的工具,甚至可以將VM 中的heap,以二進位制輸出成文字。打印出某個java程序(使用pid)記憶體內的,所有‘物件’的情況(如:產生那些物件,及其數量)。

使用方法 jmap -histo pid。如果使用SHELL ,可採用jmap -histo pid>a.log日誌將其儲存到檔案中,在一段時間後,使用文字對比工具,可以對比出GC回收了哪些物件。jmap -dump:format=b,file=outfile 3024可以將3024程序的記憶體heap輸出出來到outfile檔案裡,再配合MAT(記憶體分析工具)。

64位機上使用需要使用如下方式:

jmap -J-d64 -heap pid

2、命令格式

l  jmap [ option ] pid

l  jmap [ option ] executable core

l  jmap [ option ] [[email protected]]remote-hostname-or-IP

3、引數說明

1)、options: 

l  executable :產生core dump的java可執行程式;

l  core 將被列印資訊的core dump檔案;

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

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

2)、基本引數:

Ø  -dump:[live,]format=b,file=<filename> 使用hprof二進位制形式,輸出jvm的heap內容到檔案=. live子選項是可選的,假如指定live選項,那麼只輸出活的物件到檔案. 

$jmap–dump:live,format=b,file=aaa.bin 3772

Ø  -finalizerinfo 列印正等候回收的物件的資訊

$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 (等候回收的物件為0個)

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

$jmap –heap 3772

using parallel threads in the new generation.  ##新生代採用的是並行執行緒處理方式

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區大小

   MaxPermSize      = 134217728 (128.0MB) ##最大可分配perm區大小

Heap Usage: ##堆使用情況

New Generation (Eden + 1 Survivor Space):  ##新生代(伊甸區 + survior空間)

   capacity = 241631232 (230.4375MB)  ##伊甸區容量

   used     = 77776272 (74.17323303222656MB) ##已經使用大小

   free     = 163854960 (156.26426696777344MB) ##剩餘容量

   32.188004570534986% used ##使用比例

Eden Space:  ##伊甸區

   capacity = 214827008 (204.875MB) ##伊甸區容量

   used     = 74442288 (70.99369812011719MB) ##伊甸區使用

   free     = 140384720 (133.8813018798828MB) ##伊甸區當前剩餘容量

   34.65220164496263% used ##伊甸區使用情況

From Space: ##survior1區

   capacity = 26804224 (25.5625MB) ##survior1區容量

   used     = 3333984 (3.179534912109375MB) ##surviror1區已使用情況

   free     = 23470240 (22.382965087890625MB) ##surviror1區剩餘容量

   12.43827838477995% used ##survior1區使用比例

To Space: ##survior2 區

   capacity = 26804224 (25.5625MB) ##survior2區容量

   used     = 0 (0.0MB) ##survior2區已使用情況

   free     = 26804224 (25.5625MB) ##survior2區剩餘容量

   0.0% used ## survior2區使用比例

concurrent mark-sweep generation: ##老生代使用情況

   capacity = 1879048192 (1792.0MB) ##老生代容量

   used     = 30847928 (29.41887664794922MB) ##老生代已使用容量

   free     = 1848200264 (1762.5811233520508MB) ##老生代剩餘容量

   1.6416783843721663% used ##老生代使用比例

Perm Generation: ##perm區使用情況

   capacity = 134217728 (128.0MB) ##perm區容量

   used     = 47303016 (45.111671447753906MB) ##perm區已使用容量

   free     = 86914712 (82.8883285522461MB) ##perm區剩餘容量

   35.24349331855774% used ##perm區使用比例

Ø  -histo[:live] 列印每個class的例項數目,記憶體佔用,類全名資訊. VM的內部類名字開頭會加上字首”*”. 如果live子引數加上後,只統計活的物件數量. 

$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.HashMap$Entry;

  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.HashMap$Entry

  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.LinkedHashMap$Entry

  29:          5550         177600  java.util.concurrent.locks.ReentrantLock$NonfairSync

  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長久層的資訊. 包含每個classloader的名字,活潑性,地址,父classloader和載入的class數量. 另外,內部String的數量和佔用記憶體數也會打印出來. 

$jmap -permstat 3772

class_loader    classes bytes   parent_loader   alive?  type

<bootstrap>     2172    13144040          null          live    <internal>

0x00000007882d7ab8      0       0       0x0000000788106c00      dead    java/util/[email protected]

0x0000000788c15ca8      1       3136    0x00000007880213d8      dead    sun/reflect/[email protected]

0x0000000788fb1718      1       1968    0x00000007880213d8      dead    sun/reflect/[email protected]

0x00000007882d0f08      1       2008    0x00000007880213d8      dead    sun/reflect/[email protected]

0x0000000788176c60      1       3112    0x00000007880213d8      dead    sun/reflect/[email protected]

0x0000000788a7e018      1       3144    0x00000007880213d8      dead    sun/reflect/[email protected]

0x0000000788f515d0      1       1984    0x00000007880213d8      dead    sun/reflect/[email protected]

0x000000078829a2c8      1       3112    0x00000007880213d8      dead    sun/reflect/[email protected]

0x0000000788fab478      1       3128      null          dead    sun/reflect/[email protected]

0x0000000788030fd8      1       3112    0x00000007880213d8      dead    sun/reflect/[email protected]

0x0000000788d46048      1       3144    0x00000007880213d8      dead    sun/reflect/[email protected]

0x000000078816f6f0      1       3144      null          dead    sun/reflect/[email protected]

0x0000000788c18850      1       3112    0x00000007880213d8      dead    sun/reflect/[email protected]

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

Ø  -h | -help 列印輔助資訊 

Ø  -J 傳遞引數給jmap啟動的jvm. 

參考文獻:

相關推薦

jmap命令()

1、命令基本概述 Jmap是一個可以輸出所有記憶體中物件的工具,甚至可以將VM 中的heap,以二進位制輸出成文字。打印出某個java程序(使用pid)記憶體內的,所有‘物件’的情況(如:產生那些物件,及其數量)。 使用方法 jmap -histo pid。如果使用SHELL ,可採用jmap -hist

jmap命令

隊列 需要 print ali 以及 多個 not reat comm JVM調優命令-jmap jmap JVM Memory Map命令用於生成heap dump文件,如果不使用這個命令,還可以使用-XX:+HeapDumpOnOutOfMemoryError參

Linux中top和free命令()

機器 負載 選擇 就會 image 的區別 包括 linux中 占用內存 top:命令提供了實時的對系統處理器的狀態監視.它將顯示系統中CPU最“敏感”的任務列表. 該命令可以按CPU使用.內存使用和執行時間對任務進行排序; 而且該命令的很多特性都可以通過交互式命令或者在個

JVM監控命令()

JVM監控命令基本就是 jps、jstack、jmap、jhat、jstat 幾個命令的使用就可以了   JDK本身提供了很多方便的JVM效能調優監控工具,除了整合式的VisualVM和jConsole外,還有jps、jstack、jmap、jhat、jstat

vi命令(

vi編輯器是所有Unix及Linux系統下標準的編輯器,它的強大不遜色於任何最新的文字編輯器,這裡只是簡單地介紹一下它的用法和一小部分指令。由於對Unix及Linux系統的任何版本,vi編輯器是完全相同的,因此您可以在其他任何介紹vi的地方進一步瞭解它。Vi也是Linux中最基本的文字編輯器,學會它後,您

hbase shell基礎和常用命令()

hbase提供了一個shell的終端給使用者互動。使用命令hbase shell進入命令介面。通過執行 help可以看到命令的幫助資訊。 以網上的一個學生成績表的例子來演示hbase的用法。 name grad course math art Tom 5 97 87 Jim 4 8

Ubuntu Linux系統下apt-get命令

常用的APT命令引數: apt-cache search package 搜尋包 apt-cache show package 獲取包的相關資訊,如說明、大小、版本等 sudo apt-get install package 安裝包 sudo apt-get install

】linux之cp/scp命令+scp命令

特殊 是否 用戶登錄 usr 指定 highlight 顯示 檔案 三種 linux之cp/scp命令+scp命令詳解 名稱:cp 使用權限:所有使用者 使用方式: cp [options] source dest cp [options] source

】linux awk命令

column 環境變量 最後一行 工作流程 初始 文本文件 for循環 其中 cti 簡介 awk是一個強大的文本分析工具,相對於grep的查找,sed的編輯,awk在其對數據分析並生成報告時,顯得尤為強大。簡單來說awk就是把文件逐行的讀入,以空格為默認分隔符將每行切

()cut命令

控制 分屏顯示 ctrl+ 分隔符 comm 參數 分享圖片 合並 字節 cut 文件內容查看 顯示行中的指定部分,刪除文件中指定字段 顯示文件的內容,類似於下的type命令。 說明 該命令有兩項功能,其一是用來顯示文件的內容,它依次讀取由參數file所指明的文

()Linux命令-file

版本信息 ref 獲取文件 linux命令 過程 嘗試 file img 文件類型 Linux命令詳解-file 原文:https://www.cnblogs.com/Dodge/p/4278306.html file命令用來識別文件類型,也可用來辨別一些文件的編碼格

()Memcached用法--參數和命令

root 操作 時間戳 tro 2.0 not git item 不同的 Memcached用法--參數和命令詳解 1. memcached 參數說明: # memcached -h 1.1 memcached 的參數 常用參數 -p <num> 監聽的T

()AIX的SVMON命令

交換 ini 給定 nag limits 動態分配 mds man com svmon概述 svmon 命令用於顯示當前內存狀態的信息,可通過 # lslpp bos.perf.tools 查看是否有安裝。因為 svmon 命令在啟用中斷的用戶級別運行,所以顯示的信

[]linux awk命令

分享 相同 list 等於 connected lis gin 顯示 大於等於 awk是行處理器: 相比較屏幕處理的優點,在處理龐大文件時不會出現內存溢出或是處理緩慢的問題,通常用來格式化文本信息 awk處理過程: 依次對每一行進行處理,然後輸出 awk命令形式:

[] xargs命令,xargs與管道的區別

ddd 接受 設計 pad display sof report 程序 at命令 [From] https://www.cnblogs.com/wangqiguo/p/6464234.html 閱讀目錄 為什麽要用xargs,問題的來源 xargs是什麽,與管道有什

Linux下的tar壓縮壓縮命令

壓縮歸檔 增加 all log 參數 -c 內容 net logo tar -c: 建立壓縮檔案-x:解壓-t:查看內容-r:向壓縮歸檔文件末尾追加文件-u:更新原壓縮包中的文件 這五個是獨立的命令,壓縮解壓都要用到其中一個,可以和別的命令連用但只能用其中一個。下面的參數是

)Linux netstat命令

syntax 11.2 復制代碼 lag path rbo udp request clear 簡介 Netstat 命令用於顯示各種網絡相關信息,如網絡連接,路由表,接口狀態 (Interface Statistics),masquerade 連接,多播成員 (Mult

LINUX之sed命令

用戶 常見 mail 括號 {} int 緩沖 復雜 commands Linux sed命令是利用script來處理文本文件。 sed可依照script的指令,來處理、編輯文本文件。 Sed主要用來自動編輯一個或多個文件;簡化對文件的反復操作;編寫轉換程序等。 執行時,s

】tar 命令

tar 命令[[email protected] ~]# tar [-cxtzjvfpPN] 檔案與目錄 ….Usage: tar [OPTION…] [FILE]…Examples:        tar -cf archive.tar foo bar     

oracle 跟蹤檔案和命令

一、Oracle跟蹤檔案        Oracle跟蹤檔案分為三種類型:         一種是後臺報警日誌檔案,記錄資料庫在啟動、關閉和執行期間後臺程序的活動情況,如表空間建立、回滾段建立、某些a