【fullGC】內存監控工具


什么是fullGC:

     從年輕代空間(包括 Eden 和 Survivor 區域)回收內存被稱為 Minor GC,對老年代GC稱為Major GC,而Full GC是對整個堆來說的,在最近幾個版本的JDK里默認包括了對永久代即方法區的回收(JDK8中無永久帶了),出現Full GC的時候經常伴隨至少一次的Minor GC,但非絕對的。

會引發fullGC的幾種情況:https://blog.csdn.net/qq_38384440/article/details/81710887

分析的話需要從JVM內存結構說起(根據JDK版本會有所調整):

a、JVM內存模型(圖片來自網絡):

b、我們主要看一下堆的構成(圖片來自網絡):

1.JVM中堆空間可以分成三個大區,新生代、老年代、永久代

2.新生代可以划分為三個區,Eden區,兩個幸存區

c、生存情況(圖片來自網絡):

 

定位問題:

工具:JDK自帶的Jmap等工具:%JAVA_HOME%/bin/jmap

1、查看JVM參數命令:ps -ef |grep java

2、top命令查看PID

1、top命令查看PID
>top
空閑:
   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                   
  159910 admin     20   0 6593m 2.2g  16m S  3.7 27.4   2:32.04 java                                                                       
  2270 root      20   0  296m  25m 6792 S  1.3  0.3   0:04.93 python 
普通任務:     
   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND    
159910 admin     20   0 6725m 2.9g 9452 S 20.6 35.8  59:38.10 java                             
   644 root      20   0  238m 4356 3168 S  1.7  0.1  27:24.38 alisentry_cli
多線程任務: 
   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND          
159910 admin     20   0 6818m 4.4g 9648 S 182.7 54.9  74:45.76 java             
   644 root      20   0  238m 4356 3168 S  0.8  0.1  27:30.43 alisentry_cli 

3、jmap命令
注意[B 對象 ,這是一個byte數組,可以dump內存中的數據查看內容,會發現實際上就是傳輸的表數據


>sudo -u admin /opt/taobao/java/bin/jmap -histo:live 159910 | more 
 num     #instances         #bytes  class name
空閑:
   1:         16391      110613520  [Ljava.lang.Object;
   2:        108702       31890616  [C
   3:          8075       12048648  [B
普通任務:
   1:          6740      163115880  [B
   2:         16773      110638024  [Ljava.lang.Object;
   3:        110747       32302984  [C
多線程任務開啟:
   1:          9468     2065856344  [B
   2:         18254      110830840  [Ljava.lang.Object;
   3:        130436       34780696  [C

查看堆棧信息:

啟動任務后:
$sudo -u admin /opt/taobao/java/bin/jmap -heap 159910
Attaching to process ID 2438, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.66-b60
using parallel threads in the new generation.
using thread-local object allocation.
Concurrent Mark-Sweep GC
Heap Configuration:
   MinHeapFreeRatio         = 40
   MaxHeapFreeRatio         = 70
   MaxHeapSize              = 4294967296 (4096.0MB)
   NewSize                  = 2147483648 (2048.0MB)
   MaxNewSize               = 2147483648 (2048.0MB)
   OldSize                  = 2147483648 (2048.0MB)
   NewRatio                 = 2
   SurvivorRatio            = 10
   MetaspaceSize            = 268435456 (256.0MB)
   CompressedClassSpaceSize = 1073741824 (1024.0MB)
   MaxMetaspaceSize         = 268435456 (256.0MB)
   G1HeapRegionSize         = 0 (0.0MB)
Heap Usage:
New Generation (Eden + 1 Survivor Space):新生代區內存分布,包含伊甸園區+Survivor區
   capacity = 1968570368 (1877.375MB)
   used     = 1965707016 (1874.6442947387695MB)
   free     = 2863352 (2.7307052612304688MB)
   99.85454662700683% used
Eden Space:Eden區內存分布
   capacity = 1789657088 (1706.75MB)
   used     = 1788720872 (1705.8571548461914MB)
   free     = 936216 (0.8928451538085938MB)
   99.94768740859477% used
From Space(S1):其中一個Survivor區的內存分布
   capacity = 178913280 (170.625MB)
   used     = 176986144 (168.78713989257812MB)
   free     = 1927136 (1.837860107421875MB)
   98.92286587110806% used
To Space(S2):另一個Survivor區的內存分布
   capacity = 178913280 (170.625MB)
   used     = 0 (0.0MB)
   free     = 178913280 (170.625MB)
   0.0% used
concurrent mark-sweep generation(永久代,fullGC位置):
   capacity = 2147483648 (2048.0MB)
   used     = 2147235096 (2047.7629623413086MB)
   free     = 248552 (0.23703765869140625MB)
   99.98842589557171% used
32663 interned Strings occupying 3788288 bytes.

查找定位堆棧線程異常:

FULL GC 詳情:sudo -u admin /opt/taobao/java/bin/jstack 159910

 

 

參考地址:

http://www.cnblogs.com/myna/p/7573843.html

https://www.cnblogs.com/kongzhongqijing/articles/3621163.html

top命令,查看java PID 為29037

ps -ef | grep java 查看java進程及相關參數

jMap:

sudo -u admin /opt/taobao/java/bin/jmap -heap 29037
sudo -u admin /opt/taobao/java/bin/jmap -histo:live 29037 | more 

sudo -u admin /opt/taobao/java/bin/jmap -heap 29037
sudo -u admin /opt/taobao/java/bin/jmap -dump:format=b,file=/home/admin/mem.dat 29037
sudo -u admin /opt/taobao/java/bin/jstack 29037

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM