Metaspace 空间不足 导致频繁fgc的分析

Metaspace 导致频繁fgc的分析

    • 问题发生
    • 问题排查
    • 问题分析
    • 问题解决

问题发生

最近有机器在发布之后第二天就出现了fgc报警,新申请几台机器,并把报警机器禁流后,fgc仍然会出现。
登陆线上机器查看gc日志,发现fgc是由于Metaspace空间不够造成的。而且每次fgc之后,Metaspace使用空间基本没有减少。
同时发现新申请的机器Metaspace使用空间也增长的很快。

问题排查

使用jmap 命令打印内存dump,并用scp命令将之提取到本地,使用jhat分析后,发现加载了很多Script类
Metaspace 空间不足 导致频繁fgc的分析_第1张图片
点击Script类查看详细信息
Metaspace 空间不足 导致频繁fgc的分析_第2张图片
发现这是由aviator生成的类型。
aviator在编译表达式时,会用反射来生成 ClassExpression对象
在这里插入图片描述
dump信息中也显示了这个信息
Metaspace 空间不足 导致频繁fgc的分析_第3张图片

问题分析

aviator在执行表达式时,如果没有走缓存,则会编译执行的表达式,在编译过程中,使用反射生成ClassExpression对象,此时会产生大量的代理类。

问题解决

aviator执行表达式走缓存

你可能感兴趣的:(朦朦小梁)