groovy PermGen Full GC 問題 解決

線上環境  用來生成腳本的 結果 沒幾天就fullGC 並且持續很長時間,才降下來,  

groovy 常見的三種引入方式都會有對應的問題,:

相應的解決辦法:

<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();

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章