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