问题发生
最近有机器在发布之后第二天就出现了fgc报警,新申请几台机器,并把报警机器禁流后,fgc仍然会出现。
登陆线上机器查看gc日志,发现fgc是由于Metaspace空间不够造成的。而且每次fgc之后,Metaspace使用空间基本没有减少。
同时发现新申请的机器Metaspace使用空间也增长的很快。
问题排查
使用jmap 命令打印内存dump,并用scp命令将之提取到本地,使用jhat分析后,发现加载了很多Script类
点击Script类查看详细信息
发现这是由aviator生成的类型。
aviator在编译表达式时,会用反射来生成 ClassExpression对象
dump信息中也显示了这个信息
问题分析
aviator在执行表达式时,