1. 程式人生 > >JVM效能除錯之jmap

JVM效能除錯之jmap

jmap 的用途是為了展示java程序的記憶體對映資訊,或者堆記憶體詳情

常用的引數如下:

histo

jmap -histo pid 展示class的記憶體情況

展示的資訊為編號,例項數,位元組,類名

例如:

Java程式碼  收藏程式碼
  1. jmap -histo:live 2540  
  2.  num     #instances         #bytes  class name  
  3. ----------------------------------------------  
  4.    1:         20981         908120  [C  
  5.    2:         21015
             504360  java.lang.String  
  6.    4:          9999         159984  org.learn.util.User  
  7.    5:           312          59216  [Ljava.lang.Object;  

heap

jmap -heap pid 展示pid的整體堆資訊

如:

Java程式碼  收藏程式碼
  1. $ jmap -heap 29030  
  2. JVM version is 16.3-b01  
  3. using thread-local object allocation.  
  4. Parallel GC with 13
     thread(s)  
  5. Heap Configuration:  
  6.    MinHeapFreeRatio = 40  
  7.    MaxHeapFreeRatio = 70  
  8.    MaxHeapSize      = 8436842496 (8046.0MB)  
  9.    NewSize          = 5439488 (5.1875MB)  
  10.    MaxNewSize       = 17592186044415 MB  
  11.    OldSize          = 5439488 (5.1875MB)  
  12.    NewRatio         = 2  
  13.    SurvivorRatio    = 8
      
  14.    PermSize         = 21757952 (20.75MB)  
  15.    MaxPermSize      = 88080384 (84.0MB)  
  16. Heap Usage:  
  17. PS Young Generation  
  18. Eden Space:  
  19.    capacity = 87883776 (83.8125MB)  
  20.    used     = 31053080 (29.614524841308594MB)  
  21.    free     = 56830696 (54.197975158691406MB)  
  22.    35.33425782706469% used  
  23. From Space:  
  24.    capacity = 13828096 (13.1875MB)  
  25.    used     = 196608 (0.1875MB)  
  26.    free     = 13631488 (13.0MB)  
  27.    1.4218009478672986% used  
  28. To Space:  
  29.    capacity = 16384000 (15.625MB)  
  30.    used     = 0 (0.0MB)  
  31.    free     = 16384000 (15.625MB)  
  32.    0.0% used  
  33. PS Old Generation  
  34.    capacity = 156172288 (148.9375MB)  
  35.    used     = 27098208 (25.842864990234375MB)  
  36.    free     = 129074080 (123.09463500976562MB)  
  37.    17.35148299805917% used  
  38. PS Perm Generation  
  39.    capacity = 88080384 (84.0MB)  
  40.    used     = 50847592 (48.492042541503906MB)  
  41.    free     = 37232792 (35.507957458496094MB)  
  42.    57.728622073218936% used  

 對應的說明如下:

Java程式碼  收藏程式碼
  1. Parallel GC with 13 thread(s)   #13個gc執行緒  
  2. Heap Configuration:#堆記憶體初始化配置  
  3.    MinHeapFreeRatio = 40  #-XX:MinHeapFreeRatio設定JVM堆最小空閒比率  
  4.    MaxHeapFreeRatio = 70  #-XX:MaxHeapFreeRatio設定JVM堆最大空閒比率  
  5.    MaxHeapSize      = 8436842496 (8046.0MB)#-XX:MaxHeapSize=設定JVM堆的最大大小  
  6.    NewSize          = 5439488 (5.1875MB) #-XX:NewSize=設定JVM堆的‘新生代’的預設大小  
  7.    MaxNewSize       = 17592186044415 MB  #-XX:MaxNewSize=設定JVM堆的‘新生代’的最大大小  
  8.    OldSize          = 5439488 (5.1875MB) #-XX:OldSize=設定JVM堆的‘老生代’的大小  
  9.    NewRatio         = 2 #-XX:NewRatio=:‘新生代’和‘老生代’的大小比率  
  10.    SurvivorRatio    = 8 #-XX:SurvivorRatio=設定年輕代中Eden區與Survivor區的大小比值  
  11.    PermSize         = 21757952 (20.75MB) #-XX:PermSize=<value>:設定JVM堆的‘永生代’的初始大小  
  12.    MaxPermSize      = 88080384 (84.0MB) #-XX:MaxPermSize=<value>:設定JVM堆的‘永生代’的最大大小  
  13. Heap Usage:  
  14. PS Young Generation  
  15. Eden Space:#Eden區記憶體分佈  
  16.    capacity = 87883776 (83.8125MB)  
  17.    used     = 31053080 (29.614524841308594MB)  
  18.    free     = 56830696 (54.197975158691406MB)  
  19.    35.33425782706469% used  
  20. From Space:#其中一個Survivor區的記憶體分佈  
  21.    capacity = 13828096 (13.1875MB)  
  22.    used     = 196608 (0.1875MB)  
  23.    free     = 13631488 (13.0MB)  
  24.    1.4218009478672986% used  
  25. To Space:#另一個Survivor區的記憶體分佈  
  26.    capacity = 16384000 (15.625MB)  
  27.    used     = 0 (0.0MB)  
  28.    free     = 16384000 (15.625MB)  
  29.    0.0% used  
  30. PS Old Generation#當前的Old區記憶體分佈  
  31.    capacity = 156172288 (148.9375MB)  
  32.    used     = 27098208 (25.842864990234375MB)  
  33.    free     = 129074080 (123.09463500976562MB)  
  34.    17.35148299805917% used  
  35. PS Perm Generation#當前的 “永生代” 記憶體分佈  
  36.    capacity = 88080384 (84.0MB)  
  37.    used     = 50847592 (48.492042541503906MB)  
  38.    free     = 37232792 (35.507957458496094MB)  
  39.    57.728622073218936% used  

dump

jmap -dump:<dump-options>  pid 把pid的整體堆資訊輸出

dump-options:

live

format=b

file=<file>

匯出的檔案可以供分析用,比如jhat或者mat,以便查詢記憶體溢位原因

例如:

Java程式碼  收藏程式碼
  1. jmap -dump:live,format=b,file=tomcat.bin 29030