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

简介: Groovy Full gc 问题的解决

线上环境 使用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();
相关文章
|
10月前
|
监控 Java 测试技术
GC Cause解析
通常,在基于Java生态体系中的应用程序抛出异常时,生产环境都会通过gc log[当然,也有2愣子直接去线上环境进行各种骚操作]去捕获各种可疑线索,以便快速、高效定位及解决问题。
142 0
|
6月前
|
缓存 算法 Java
JVM CMS GC算法解析
JVM CMS GC算法解析
42 0
|
10月前
|
存储 监控 算法
Java虚拟机 G1 GC 调优解析
在上篇文章中,我们解析了 Java 虚拟机体系生态中基于 CMS GC 策略的调优场景及基本案例,具体链接为:Java虚拟机 CMS GC 调优解析。本文则重点介绍另一款当前比较流行的 GC 策略 - G1。
233 0
|
10月前
|
前端开发 Java
Java虚拟机 CMS GC 调优解析
随着 JDK 版本的不断升级,其 GC 策略也随之不停革新,从早期的 1.4 到如今的 11(本文仅讨论在线上环境落地规模较大的版本),其对应的 GC 策略也随之由 Serial、Parallel、CMS 演进至当前的 G1 甚至即将落地的 ZGC 。每一次的调整无不是基于环境的适配性以及业务场景特性,无论如何,只要能够基于特定的操作系统内核、物理内存、JDK版本以及业务特性,达到收益最大化,采用何种实现策略都不为过。当然,还是建议大家以官方的推荐为准,基于自己的业务场景进行不断优化调整,这样才能保证万无一失,使得我们的业务能够健康发展。
97 0
|
10月前
|
监控 Java Unix
Java GC Log Time解析
通常,我们在了解应用服务的性能时,都会去在所定义的垃圾收集日志文件中去分析GC活动轨迹,在gc.log文件中,我们经常会看到每个GC事件所打印的三种时间类型: “ User ”、“ Sys ”及“ Real ”,它们分别表示什么呢?具有哪些象征性意义呢?本文将结合作者的相关实际经验进行简要解析,希望阅读完本篇文章后对大家在GC Log这块的问题定位与分析有所帮助。
121 0
|
10月前
|
机器学习/深度学习 人工智能 监控
GC日志分析工具-GCeasy解析
一款新的GC日志分析仪器,业界首个基于人工智能机器学习指导的垃圾收集日志分析工具。 GCeasy具有内置的智能功能,可以自动检测JVM和Android GC日志中的问题并为之推荐解决方案。
534 0
|
10月前
|
存储 算法 Java
CMS 触发GC(Allocation Failure)解析
针对GC中发生的"Allocation Failure"
440 0
|
JSON 数据格式
【分享】宜搭集成自动化,Groovy节点一般用法,解析JSON数据
【分享】宜搭集成自动化,Groovy节点一般用法,解析JSON数据 by 页一
1142 0
【分享】宜搭集成自动化,Groovy节点一般用法,解析JSON数据
|
缓存 Oracle Java
53.【面试宝典】面试宝典-jvm参数配置实战-gc日志解析
【面试宝典】面试宝典-jvm参数配置实战-gc日志解析
53.【面试宝典】面试宝典-jvm参数配置实战-gc日志解析
|
缓存 监控 算法
【JVM深度解析】GC与分代回收机制
你真的了解Java的分代收集吗?什么是垃圾呢?垃圾会马上被回收吗?JVM中哪些区域会被回收呢?Java/C++垃圾收集有什么不同?不懂?一文带你搞懂gc基础!
【JVM深度解析】GC与分代回收机制

推荐镜像

更多