6

我的情况是这样的:

每次在将 war 文件上传到 web-app 文件夹之前,我都会通过调用sh shutdown.sh. 过去,完全关机大约需要 30 秒。但现在它已经不能很好地工作了。

实际上,它做了一些工作,因为当我从网页访问应用程序时,它会抛出 503 错误(维护中)。但是当我使用ps aux | grep tomcat检查时,tomcat进程仍然存在。它会在那里大约 5 - 10 分钟。

我知道完成所有任务可能需要额外的时间,但是在完全停止之前它太慢了(5 - 10 分钟)。我不明白为什么会发生这种情况,但一定有一些原因。也许与代码或我们最近使用的新部署脚本有关。我几乎不知道在哪里检查。

这对我们的团队很重要,因为我们正在使用“自动部署”,其中我们使用脚本自动打包战争文件,在特定时间上传和部署。如果我们在旧的成功关闭之前启动一个新的 tomcat 实例,它将永远挂在那里,并且通过“kill -9”清理任务是令人生畏的。

有没有人尝试过这个问题?任何线索将不胜感激。

4

2 回答 2

3

黄龙 -

谢谢你的更新。

1) 您看到 Quartz 作业正在运行这一事实以及错误消息都很重要:

严重:Web 应用程序 [/project] 似乎已经启动了一个名为 [Resource 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);
于 2012-07-05T05:54:07.417 回答
2

如果这是最近几天神秘地开始发生的事情,也许您遇到了 Linux 闰秒错误?有关详细信息,请参阅

https://serverfault.com/questions/403732/anyone-else-experience-high-rates-of-linux-server-crashes-during-a-leap-second

https://access.redhat.com/knowledge/articles/15145

http://pedroalves-bi.blogspot.fi/2012/07/java-leap-second-bug-how-to-fix-your.html

于 2012-07-05T06:08:14.260 回答