调用shutdown.sh后Tomcat关机非常慢?

Hoà*_*ong 5 java linux apache tomcat tomcat6

我的情况是这样的:

每次在将war文件上传到web-app文件夹之前,我都会通过调用来停止Tomcat sh shutdown.sh.过去大约需要30秒才能完全停机.但现在它不再适用了.

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

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

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

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

pau*_*sm4 3

Ho\xc3\xa0ng 长 -

\n\n

谢谢你的更新。

\n\n

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

\n\n
\n

严重:Web 应用程序 [/project] 似乎启动了一个名为 [BasicResourcePool.close() 中的资源销毁器] 的线程,但未能阻止它。这很可能造成内存泄漏。

\n
\n\n

2)一个建议是配置:

\n\n
\n

http://forum.springsource.org/showthread.php?17833-Spring-Quartz-Tomcat-no-shutdown

\n\n

我有同样的问题。我通过添加\n到SchedulerFactoryBean定义来修复它 destroy-method="destroy"。\n这样,当应用程序停止时,spring会关闭调度程序。

\n
\n\n

3)另一个建议是添加关闭监听器:

\n\n
\n

http://forums.terracotta.org/forums/posts/list/15/4341.page

\n\n

使用上下文侦听器并在关闭时引入超时解决了我的问题。我关机后稍等一下:

\n\n
  public void contextDestroyed(ServletContextEvent sce) {\n    try {\n      factory.getScheduler().shutdown();\n      Thread.sleep(1000);\n
Run Code Online (Sandbox Code Playgroud)\n
\n