记一次线上Groovy导致的OOM的问题解决过程

本文记录了一次线上Groovy导致的OOM问题解决过程,问题由类加载后无法卸载引起,最终通过升级Groovy版本、手动调用System.gc()并清理缓存得到解决。分析了Groovy类加载机制和永久代/元空间回收条件。
摘要由CSDN通过智能技术生成

jobmgr模块是一个任务执行框架,里面有一个定时任务,定时从数据库读取最新的script,并通过groovy load成class,以此实现动态更新脚本。

代码如下:

@Service("jobTemplateClassService")
public class JobTemplateClassServiceImpl extends ScheduledTaskExecutor implements JobTemplateClassService {
   
    private final Logger logger = LoggerFactory.getLogger(this.getClass());
    @Value("${galileo.api.endpoint}")
    private String endPoint;
    private String jobTemplateScriptListApi = "/job_template_script/list";
    private String jobTemplateScriptGetApi = "/job_template_script/get";
    private Map<String, Class<JobTemplate>> jobTemplateScriptMap = new HashMap<>();
    @Autowired
    private JobTemplateClassFactory jobTemplateClassFactory;

    @Override
    public Class<JobTemplate> getJobTemplateClass(String jobTemplateScriptUuid) {
        Class<JobTemplate> jobTemplateClass = null;
        if (null != jobTemplateScriptMap) {
            jobTemplateClass = jobTemplateScriptMap.get(jobTemplateScriptUuid);
        }
        if (null == jobTemplateClass) {
            JobTemplateScript jobTemplateScript = HttpClient.get(HttpUtils.buildRequestUrl(endPoint, jobTemplateScriptGetApi,
                    new Parameter(
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值