JVM 監控以及內存分析

1 內存分析
1.1 jmap -histo 命令
pid=`jps | awk '{if ($2 == "Jps") print $1}'`
jmap -histo $pid >>1.txt 查看pid中類的內存佔用
num     #instances(實例數)         #bytes(佔用字節)  class name
class name 解讀
B表明byte
C表明char
D表明double
F表明float
I表明int
J表明long
Z表明boolean
前邊有[表明數組,[I 就至關於int[]
對象用[L+類名錶示

若是某個類的個數特別多, 就得檢查是否內存溢出了。

1.2 命令 jmap -heap

    jmap -heap 22792       
    Attaching to process ID 22792, please wait...  
    Debugger attached successfully.  
    Server compiler detected.  
    JVM version is 19.0-b09  
      
    using thread-local object allocation.  
    Parallel GC with 8 thread(s)  
      
    Heap Configuration:  
       MinHeapFreeRatio = 40                            # 對應jvm啓動參數 -XX:MinHeapFreeRatio 設置JVM堆最小空閒比率 (默認40)  
       MaxHeapFreeRatio = 70                            # 對應jvm啓動參數 -XX:MaxHeapFreeRatio 設置JVM堆最大空閒比率 (默認70)  
       MaxHeapSize      = 10737418240 (10240.0MB)       # 對應jvm啓動參數 -XX:MaxHeapSize 設置JVM堆的最大大小  
       NewSize          = 5368709120 (5120.0MB)         # 對應jvm啓動參數 -XX:NewSize 設置JVM堆的年輕代的默認大小  
       MaxNewSize       = 5368709120 (5120.0MB)         # 對應jvm啓動參數 -XX:MaxNewSize 設置JVM堆的年輕帶的最大大小  
       OldSize          = 5439488 (5.1875MB)            # 對應jvm啓動參數 -XX:OldSize 設置JVM堆的老年代的大小  
       NewRatio         = 2                             # 對應jvm啓動參數 -XX:NewRatio 老年代與年輕代的大小比率   
       SurvivorRatio    = 8                             # 對應jvm啓動參數 -XX:SurvivorRatio 設置年輕代中Eden區與Survivor區的大小比值   
       PermSize         = 21757952 (20.75MB)            # 對應jvm啓動參數 -XX:PermSize 設置JVM堆的持久帶的初始大小  
       MaxPermSize      = 1073741824 (1024.0MB)         # 對應jvm啓動參數 -XX:MaxPermSize 設置JVM堆的永生代的最大大小  
      
    Heap Usage:  
    PS Young Generation  
    Eden Space:                                         # Eden區內存分佈 總量 已使用 空閒 使用比率  
       capacity = 5357305856 (5109.125MB)  
       used     = 1647437208 (1571.118553161621MB)  
       free     = 3709868648 (3538.006446838379MB)  
       30.751225565270396% used  
    From Space:                                         # 其中一個Survivor(sərˈvaɪvər)區內存分佈 總量 已使用 空閒 使用比率  
       capacity = 5898240 (5.625MB)  
       used     = 2375696 (2.2656402587890625MB)  
       free     = 3522544 (3.3593597412109375MB)  
       40.278049045138886% used  
    To Space:                                           # 另外一個Survivor區內存分佈 總量 已使用 空閒 使用比率  
       capacity = 5505024 (5.25MB)  
       used     = 0 (0.0MB)  
       free     = 5505024 (5.25MB)  
       0.0% used  
    PS Old Generation                                   # 當前老年代內存分佈 總量 已使用 空閒 使用比率  
       capacity = 5368709120 (5120.0MB)  
       used     = 181392168 (172.98905181884766MB)  
       free     = 5187316952 (4947.010948181152MB)  
       3.3786924183368683% used  
    PS Perm Generation                                  # 當前持久代內存分佈 總量 已使用 空閒 使用比率  
       capacity = 72286208 (68.9375MB)  
       used     = 72213176 (68.86785125732422MB)  
       free     = 73032 (0.06964874267578125MB)  
       99.89896827898346% used  

1.3
  jstat -gcutil [pid] [internal]  很實用
S0: Survivor space 0 區已使用空間的百分比
S1: Survivor space 1 區已使用空間的百分比
E: Eden space 區已使用空間的百分比
O: Old space 區已使用空間的百分比
P: Perm space 區已使用空間的百分比
YGC: Young GC 的次數
YGCT: Young GC 所用的時間 單位秒
FGC: Full GC 的次數
FGCT: Full GC 所用的時間 單位秒
GCT: 用於垃圾回收的總時間 單位秒

1.4
儘可能減小Full GC的次數, 由於Full GC的消耗要比Monitor GC要大
年輕代大小: 儘量設大, 下降年輕代GC次數, 同時也減小達到老年代的對象?
分配堆棧的最小值最好等於最大值, 由於動態分配也是須要耗費時間的. 如年輕代, 老年代, 持久代的最小最大值可設爲一致
參考

http://www.oracle.com/technetwork/java/gc-tuning-5-138395.html  http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html


2 參數調優html

http://blog.csdn.net/historyasamirror/article/details/6233007java

相關文章
相關標籤/搜索