我的情况是这样的:
每次将war文件上传到web-app文件夹之前,我都会通过调用sh shutdown.sh
来停止Tomcat。过去大约需要30秒才能完全停机。但现在它不再适用了。
实际上,它做了一些工作,因为当我从网页访问应用程序时,它会抛出503错误(在维护中)。但是当我使用ps aux | grep tomcat
进行检查时,tomcat进程仍然存在。它将在那里持续约5-10分钟。
我知道可能需要花费额外的时间来完成所有任务,但是在它完全停止之前它太慢了(5-10分钟)。我不明白为什么会这样,但必须有一些原因。也许这与代码或我们最近使用的新部署脚本有关。我几乎不知道在哪里检查。
这对我们的团队很重要,因为我们正在使用“自动部署”,我们使用脚本自动打包war文件,在特定时间上传和部署。如果我们在旧的tomcat实例成功关闭之前启动了一个新的tomcat实例,它会挂在那里永恒,并且通过“kill -9”清理任务是令人生畏的。
有没有人尝试过这个问题?任何线索都将受到赞赏。
答案 0 :(得分:2)
HoàngLong -
感谢您的更新。
1)您看到正在运行的Quartz作业以及错误消息都很重要:
严重:网络应用程序[/ project]似乎已经启动了 名为[Basic Destroyer in BasicResourcePool.close()]但有的线程 未能阻止它。这很可能会造成内存泄漏。
2)一个建议是配置:
http://forum.springsource.org/showthread.php?17833-Spring-Quartz-Tomcat-no-shutdown
我遇到了同样的问题。我通过添加来修复它
destroy-method="destroy"
到SchedulerFactoryBean定义。 这样,spring会在应用程序关闭时关闭调度程序 停止。
3)另一个建议是添加一个关闭监听器:
http://forums.terracotta.org/forums/posts/list/15/4341.page
使用上下文侦听器并在关闭解决时引入超时 这个问题对我而言。关机后我才等一下:
public void contextDestroyed(ServletContextEvent sce) { try { factory.getScheduler().shutdown(); Thread.sleep(1000);
答案 1 :(得分:2)
如果这是在最近几天内神秘地开始发生的事情,也许你正在遇到Linux闰第二个错误?有关更多信息,请参阅
https://access.redhat.com/knowledge/articles/15145
http://pedroalves-bi.blogspot.fi/2012/07/java-leap-second-bug-how-to-fix-your.html