设为首页 加入收藏

TOP

Spring3.2.11与Quartz2.2.1整合时内存泄漏问题解决(二)
2015-07-16 12:55:56 来源: 作者: 【 】 浏览:3
Tags:Spring3.2.11 Quartz2.2.1 整合 内存 泄漏 问题 解决
] appears to have started a thread named [scheduler_Worker-5] but has failed to stop it. This is very likely to create a memory leak.
Jun 24, 2014 5:14:38 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [/feeder##1.5.0] appears to have started a thread named [scheduler_Worker-6] but has failed to stop it. This is very likely to create a memory leak.
Jun 24, 2014 5:14:38 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads


问题的原因


究其原因是开启的scheduler_Worker线程没有关闭。但Spring的SchedulerFactoryBean实现了DisposableBean接口,表示web容器关闭时会执行destroy(),执行内容如下:


? /**
? ? * Shut down the Quartz scheduler on bean factory shutdown,
? ? * stopping all scheduled jobs.
? ? */
? ? public void destroy() throws SchedulerException {
? ? ? ? logger.info("Shutting down Quartz Scheduler");
? ? ? ? this.scheduler.shutdown(this.waitForJobsToCompleteOnShutdown);
? ? }


表示工厂已经做了shutdown。所以,问题出现在真正执行的scheduler.shutdown(true)。


原来这是Quartz的bug(见https://jira.terracotta.org/jira/browse/QTZ-192),在调用scheduler.shutdown(true)后,Quartz检查线程并没有等待那些worker线程被停止就结束了。


网上说在Quartz2.1版本已经修补了这个bug,但笔者使用的2.2.1版本仍旧有问题。


问题的解决


那么问题如何解决,这里有一个不太美观的方案:在调用scheduler.shutdown(true)后,增加一点睡眠时间,等待worker线程全部停止。如下:


1。自定义schedulerFactory继承Spring的SchedulerFactoryBean,覆盖destroy()增加延时。


public class SchedulerFactoryBeanWithShutdownDelay extends SchedulerFactoryBean {


? /**
? ? * 关于Quartz内存泄漏的不太美观的解决方案:
? ? * 在调用scheduler.shutdown(true)后增加延时,等待worker线程结束。
? ? */
? ? @Override
? ? public void destroy() throws SchedulerException {
? ? ? ? super.destroy();
? ? ? ? try {
? ? ? ? ? ? Thread.sleep(1000);
? ? ? ? } catch (InterruptedException e) {
? ? ? ? ? ? throw new RuntimeException(e);
? ? ? ? }
? ? }
}


2。把spring配置文件中的SchedulerFactoryBean替换为自定义的工厂即可。




OK,问题解决。


首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Hibernate PO对象状态 下一篇Ruby中的语句中断和返回

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: