线上内存飙升的分析

背景:pgs-order服务内存一直不降,占用将近3G.因此针对线上pgs-order容器的jvm有关内容进行分析

9月2日:
首先查看堆配置情况

```
Heap Configuration:
   MinHeapFreeRatio         = 40 
   MaxHeapFreeRatio         = 70
   MaxHeapSize              = 2621440000 (2500.0MB)
   NewSize                  = 87228416 (83.1875MB)
   MaxNewSize               = 87228416 (83.1875MB)
   OldSize                  = 2534211584 (2416.8125MB)
   NewRatio                 = 2
   SurvivorRatio            = 8
   MetaspaceSize            = 21807104 (20.796875MB)
   CompressedClassSpaceSize = 1073741824 (1024.0MB)
   MaxMetaspaceSize         = 17592186044415 MB
   G1HeapRegionSize         = 0 (0.0MB)

所有注释:
MinHeapFreeRatio:VM最小空闲比率 可由-XX:MinHeapFreeRatio=参数设置, jvm heap 在使用率小于 n 时 ,heap 进行收缩
MaxHeapFreeRatio:JVM最大空闲比率 可由-XX:MaxHeapFreeRatio=参数设置, jvm heap 在使用率大于 n 时 ,heap 进行扩张 
MaxHeapSize:JVM堆的最大大小 可由-XX:MaxHeapSize=参数设置
NewSize:JVM新生代的默认大小 可由-XX:NewSize=参数设置
MaxNewSize:JVM新生代的最大大小 可由-XX:MaxNewSize=参数设置
OldSize:JVM老生代的默认大小 可由-XX:OldSize=参数设置 
NewRatio:新生代:老生代(的大小)=1:2 可由-XX:NewRatio=参数指定New Generation与Old Generation heap size的比例。
SurvivorRatio:survivor:eden = 1:8,即survivor space是新生代大小的1/(8+2)[因为有两个survivor区域] 可由-XX:SurvivorRatio=参数设置
MetaspaceSize:元空间的默认大小,超过此值就会触发Full GC 可由-XX:MetaspaceSize=参数设置
CompressedClassSpaceSize:类指针压缩空间的默认大小 可由-XX:CompressedClassSpaceSize=参数设置
MaxMetaspaceSize:元空间的最大大小 可由-XX:MaxMetaspaceSize=参数设置
G1HeapRegionSize:使用G1垃圾收集器的时候,堆被分割的大小 可由-XX:G1HeapRegionSize=参数设置
```

```
Heap Usage:
New Generation (Eden + 1 Survivor Space):
   capacity = 78512128 (74.875MB)
   used     = 44358576 (42.30363464355469MB)
   free     = 34153552 (32.57136535644531MB)
   56.49901121008973% used
Eden Space:
   capacity = 69795840 (66.5625MB)
   used     = 35642288 (33.99113464355469MB)
   free     = 34153552 (32.57136535644531MB)
   51.06649336120892% used
From Space:
   capacity = 8716288 (8.3125MB)
   used     = 8716288 (8.3125MB)
   free     = 0 (0.0MB)
   100.0% used
To Space:
   capacity = 8716288 (8.3125MB)
   used     = 0 (0.0MB)
   free     = 8716288 (8.3125MB)
   0.0% used
concurrent mark-sweep generation:
   capacity = 2534211584 (2416.8125MB)
   used     = 490596280 (467.8690719604492MB)
   free     = 2043615304 (1948.9434280395508MB)
   81.89675388998616% used
```
观察上面的参数,发现一个问题:
老年代占用了24G内存,但是有19G多都是空闲的,说明内存使用时正常的,是因为我们在docker 启动的时候,就将堆内存最大值与最小值设置成一样的,减少内存分配次数,增强效率

需要调整新生代比例

导出一份dump文件
jmap -dump:format=b,file=heapdump.phrof pid

 

 

 

线上内存飙升的分析_第1张图片

 

线上内存飙升的分析_第2张图片

 

你可能感兴趣的:(内存飙升,Web项目,jvm)