1. 程式人生 > >Java常用分析工具之jmap

Java常用分析工具之jmap

簡介

jmap是JDK中提供的一個用來監視程序執行中的jvm實體記憶體的佔用情況的工具。該程序記憶體內,所有物件的情況,例如產生了哪些物件,物件數量。當系統崩潰時,jmap 可以從core檔案或程序中獲得記憶體的具體匹配情況,包括Heap size, Perm size等。

使用jmap會影響線上執行的應用,所以儘量不要在線上執行此命令。如果想dump堆資訊,可以使用gcore命令,比jmap -dump快。

使用

jmap的使用很簡單,可以通過以下命令檢視。

jmap -h
Usage:
    jmap [option] <pid>
        (to connect to running process)
    jmap [option] <executable
<core>
(to connect to a core file) jmap [option] [[email protected]]<remote server IP or hostname> (to connect to remote debug server) .......

案例

檢視堆heap佔用情況

jmap -heap 90099
Attaching to process ID 90099, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is
24.71-b01 using thread-local object allocation. Parallel GC with 4 thread(s) #垃圾回收的方式 Heap Configuration: #堆配置資訊 MinHeapFreeRatio = 0 MaxHeapFreeRatio = 100 MaxHeapSize = 2147483648 (2048.0MB) NewSize = 1310720 (1.25MB) MaxNewSize = 17592186044415 MB OldSize = 5439488
(5.1875MB) NewRatio = 2 SurvivorRatio = 8 PermSize = 21757952 (20.75MB) MaxPermSize = 85983232 (82.0MB) G1HeapRegionSize = 0 (0.0MB) Heap Usage: PS Young Generation Eden Space: capacity = 34603008 (33.0MB) used = 9773032 (9.320289611816406MB) free = 24829976 (23.679710388183594MB) 28.24330185398911% used From Space: capacity = 5242880 (5.0MB) used = 0 (0.0MB) free = 5242880 (5.0MB) 0.0% used To Space: capacity = 5242880 (5.0MB) used = 0 (0.0MB) free = 5242880 (5.0MB) 0.0% used PS Old Generation capacity = 89128960 (85.0MB) used = 0 (0.0MB) free = 89128960 (85.0MB) 0.0% used PS Perm Generation capacity = 22020096 (21.0MB) used = 2666808 (2.5432662963867188MB) free = 19353288 (18.45673370361328MB) 12.110791887555804% used 677 interned Strings occupying 44048 bytes.

檢視物件佔用記憶體情況

$ jmap -histo:live 96176

 num     #instances         #bytes  class name
----------------------------------------------
   1:          5948         766656  <methodKlass>
   2:          5948         679168  <constMethodKlass>
   3:           401         474448  <constantPoolKlass>
   4:           365         289664  <constantPoolCacheKlass>
   5:           401         276112  <instanceKlassKlass>
   6:           562          93176  [B
   7:           900          86256  [C
   8:           463          45328  java.lang.Class
   9:           653          43216  [[I
  10:           608          37144  [S
  11:            45          24480  <objArrayKlassKlass>

輸出內容的一些說明:

[C is a char[]

[S is a short[]

[I is a int[]

[B is a byte[]

[[I is a int[][]

上面的輸出中[C物件佔用Heap這麼多,往往跟String有關,String其內部使用final char[]陣列來儲存資料的。

constMethodKlass/ methodKlass/ constantPoolKlass/ constantPoolCacheKlass/ instanceKlassKlass/ methodDataKlass

與Classloader相關,常駐與Perm區。

匯出堆資訊

可以使用jmap把堆資訊匯出,並使用視覺化工具mat分析。匯出的命令如下:

$ jmap -dump:format=b,file=a.dmp 96185
Dumping heap to /Users/canglong/dev/test/a.dmp ...
Heap dump file created

相關推薦

Java常用分析工具jmap

簡介jmap是JDK中提供的一個用來監視程序執行中的jvm實體記憶體的佔用情況的工具。該程序記憶體內,所有物件的情況,例如產生了哪些物件,物件數量。當系統崩潰時,jmap 可以從core檔案或程序中獲得記憶體的具體匹配情況,包括Heap size, Perm size等。使用

Linux系統IO分析工具iotop常用引數介紹

                     Linux系統IO分析工具之iotop常用引數介紹                                               作者:尹正傑 版權宣告:原創作品,謝絕轉載!否則將追究法律責任。       W

Linux系統IO分析工具iotstat常用引數介紹

                Linux系統IO分析工具之iotstat常用引數介紹                                            作者:尹正傑 版權宣告:原創作品,謝絕轉載!否則將追究法律責任。       1>.安裝

java記憶體溢位分析工具jmap使用實戰

在一次解決系統tomcat老是記憶體撐到頭,然後崩潰的問題時,使用到了jmap。1 使用命令在環境是linux+jdk1.5以上,這個工具是自帶的,路徑在JDK_HOME/bin/下jmap -histo pid>a.log2 輸出結果摘要Size    Count 

論持久戰Java效能監控工具jmap

首先看一下Java官方提供的引數示例: 下面介紹三個常用引數(heap、dump、histo) -heap(to print java heap summary) ①堆配置資訊 ②堆使用資訊 -dump:(to dump jav

idea外掛篇java記憶體分析工具(JProfiler)

前言 在執行java的時候有時候想測試雲執行時佔用記憶體情況,這時候就需要使用測試工具查看了。在eclipse裡面有 Eclipse Memory Analyzer tool(MAT)外掛可以測試,而

分析 Java heap dump工具IBM HeapAnalyzer

 IBM HeapAnalyzer是一款免費的JVM記憶體堆的圖形分析工具,它可以有效的列舉堆的記憶體使用狀況,幫助分析Java記憶體洩漏的原因。   下載解壓後有一個ha413.jar  執行環境要求: 1、使用 Java 2 Platform,JDK 1

Java命令學習系列jmap

.com respond 標識 config 一個bug running vivo huang 父類 jmap是JDK自帶的工具軟件,主要用於打印指定Java進程(或核心文件、遠程調試服務器)的共享對象內存映射或堆內存細節。可以使用jmap生成Heap Dump。 什麽

JVM自帶性能分析工具介紹——jmap和jhat

inf info weibo 介紹 oci mar style lan user 0L蛻投M口l形繃9http://huiyi.docin.com/sina_5847440681 RH姥胤1操士剮訊39鎂http://www.docin.com/sina_62699771

慢查詢日誌分析工具pt-query-digest

lan git bash pre 日誌分析 windows images git 所有 curl 簡介 pt-query-digest 是用於分析mysql慢查詢的一個工具,與mysqldumpshow工具相比,py-query_digest 工具的分析結果更

Java 常用類庫 比較類 Comparable

instance 多少 一個 public 類關系 name length compare 實例 http://www.verejava.com/?id=169930999133100 /** 知識點: 比較類 Comparable 題目: 將某班學生按數

Java 常用類庫 Random 隨機數類實例

com clas CA java arraylist wan 隨機 TP array http://www.verejava.com/?id=169931132381103 /** 知識點:Random 隨機數類 實際應用: 敵人飛機隨機從屏幕的上方出現

Java 常用類庫 Date 日期類

ID ret ati 轉換成 知識 HR text exceptio imp http://www.verejava.com/?id=16993074079095 /** 知識點: Date 日期類 */ import java.util.Date; import

Java 常用類庫 SimpleDateFormat 日期格式化

pareto parse out oid turn sta AS 對象 ref http://www.verejava.com/?id=16993055673892 /** 知識點:Calandar 日期處理類 */ import java.util.*; impo

Java 常用類庫 大精度數值

++ mat CI 數值 ger import str big sta http://www.verejava.com/?id=17159675312132 import java.math.BigDecimal; import java.math.BigInteger;

Java常用資料結構List

JDK 11正式釋出了,Oracle終於出了一個長期維護版本,應該將是繼JDK 8之後的一個常規使用版本。 前言 作為Java系開發者對Java集合類的使用應該是較為頻繁的,也是面試中經常會被問的問題。一直想整理一下Java集合和Android中的優化集合類,借這次機會

Java常用資料結構SetTreeSet

前言 上篇文章我們分析了HashSet,它是基於HashMap實現的,那TreeSet會是怎麼實現的呢?沒錯!和大家想的一樣,它是基於TreeMap實現的。所以,TreeSet的原始碼也很簡單,主要還是理解TreeMap。 TreeSet的繼承關係 按照慣例,先來看TreeSet類的繼承關係: pub

Android 效能分析工具TraceView

Android 效能分析工具之TraceView TraceView簡介 Traceview本身是一個數據分析工具, Android 平臺將Traceview作為 Android SDK內建的一個工具,主要用於載入 Android 應用程式所生成的trace檔案並且分析trace檔案採集到的資料裡面

Java 常用工具類—判斷Excel版本&讀取Excel/CSV檔案

以下內容均來自實際專案需求,記錄下,網上找的讀取Excel會出現不少問題,下面程式碼是經過好多次測試改進的符合現在專案的程式碼,如有不同要求,請自行修改,程式碼均只去掉了包名。 注:我們的Excel 第一行是表頭,其他行是資料1、第一行遇到空列,後面的內容自動忽略掉, 2、如

Mac os 下開啟java記憶體分析工具 mat

下載MAT後, 解壓得到mat.app, 但是直接點選打開出錯, 顯示錯誤資訊在檔案 /Users/along/.eclipse/762171948_macosx_cocoa_x86_64/configuration/1539580415773.log中. 1.