您现在的位置是:首页 > 文章详情

Groovy PermGen Full GC 问题解析以及解决

日期:2018-07-08点击:601

线上环境 使用Groovy脚本为业务提供自定义配置 结果 没几天就fullGC 并且持续很长时间,才降下来,
groovy 常见的三种引入方式都会有对应的问题,:
核心的问题是Groovy会缓存掉曾经执行的代码片段成为META-class ,如果每次执行的代码都不一样。那么缓存的类会越来越多。

相应的解决办法:

<dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-all</artifactId> <version>2.4.7</version> </dependency>
//清除groovy 里面的缓存, 防止fullGC,也可以定时来做 GroovyClassLoader groovyClassLoader = engine.getClassLoader(); Class[] classes = engine.getClassLoader().getLoadedClasses(); for (Class clazz : classes) { GroovySystem.getMetaClassRegistry().removeMetaClass(clazz); groovyClassLoader.clearCache(); try { Field globalClassValue = ClassInfo.class.getDeclaredField("globalClassValue"); globalClassValue.setAccessible(true); GroovyClassValue classValueBean = (GroovyClassValue) globalClassValue.get(null); classValueBean.remove(clazz); } catch (Throwable e) { } } groovyClassLoader.clearCache(); ClassInfo.clearModifiedExpandos(); /** * Using java beans (e.g. Groovy does it) results in all referenced class infos being cached in ThreadGroupContext. A valid fix * would be to hold BeanInfo objects on soft references, but that should be done in JDK. So let's clear this cache manually for now, * in clients that are known to create bean infos. */ Introspector.flushCaches();
原文链接:https://yq.aliyun.com/articles/608717
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章