记一次生产环境永久代 permGen space 内存溢出

2020-09-22  本文已影响0人  新手党

1、查看生产内存使用情况

jmap -heap pid
结果如下:
Heap Configuration:
   MinHeapFreeRatio = 40
   MaxHeapFreeRatio = 70
   MaxHeapSize      = 4294967296 (4096.0MB)
   NewSize          = 1610612736 (1536.0MB)
   MaxNewSize       = 1610612736 (1536.0MB)
   OldSize          = 5439488 (5.1875MB)
   NewRatio         = 2
   SurvivorRatio    = 8
   PermSize         = 805306368 (768.0MB)
   MaxPermSize      = 805306368 (768.0MB)
   G1HeapRegionSize = 0 (0.0MB)

Heap Usage:
New Generation (Eden + 1 Survivor Space):
   capacity = 1449590784 (1382.4375MB)
   used     = 1068927656 (1019.4088516235352MB)
   free     = 380663128 (363.02864837646484MB)
   73.73995942843963% used
Eden Space:
   capacity = 1288568832 (1228.875MB)
   used     = 1021910896 (974.5701751708984MB)
   free     = 266657936 (254.30482482910156MB)
   79.30588344387334% used
From Space:
   capacity = 161021952 (153.5625MB)
   used     = 47016760 (44.83867645263672MB)
   free     = 114005192 (108.72382354736328MB)
   29.198975304932336% used
To Space:
   capacity = 161021952 (153.5625MB)
   used     = 0 (0.0MB)
   free     = 161021952 (153.5625MB)
   0.0% used
concurrent mark-sweep generation:
   capacity = 2684354560 (2560.0MB)
   used     = 593305384 (565.8201065063477MB)
   free     = 2091049176 (1994.1798934936523MB)
   22.102347910404205% used
Perm Generation:
   capacity = 805306368 (768.0MB)
   used     = 91667304 (87.4207534790039MB)
   free     = 713639064 (680.5792465209961MB)
   11.3829106092453% used

上述查询结果是写文章临时搞的,当时生产的Perm Generation已经达到96%;

首先分析永久代存放的东西 :用于存放静态文件,如今Java类、方法等。
既然是这样那么最有可能就是class文件,联想到之前做的一个功能,加载不同版本的mysql和hana库,这里使用了动态加载jar包驱动,那基本确定就是这里的问题了,当然后来也证实了 确实是这里的问题,

2、使用arthas 分析

在事故刚发生的时候,我是用了阿里的arthas工具进行分析,还是很香的
直接使用 jvm命令 查看到加载的class数目

image.png
还有一些其他的命令,具体查看官网:https://arthas.aliyun.com/doc/install-detail.html
上一篇下一篇

猜你喜欢

热点阅读