Java 我怎么知道';正在停止关闭spring Web应用程序

Java 我怎么知道';正在停止关闭spring Web应用程序,java,spring,tomcat,Java,Spring,Tomcat,我们有一个稍微增长的SpringWebApp(在Tomcat7上),它的关闭速度非常慢。(这对我们持续交付的绩效有负面影响) 我的怀疑是,在@PreDestroy方法中一定有一些bean被阻塞了(或者占用了很长时间) 到目前为止,我已经通过为每个池、线程和计时器指定不同的名称并确保它们是守护进程线程或被正确关闭,来确保它与未正确关闭的线程(池)无关 有没有人解决过这样的情况,能给我一个如何应对的提示 顺便说一句:终止tomcat进程不是一个选项-我们真的需要一个干净的生产系统关闭 分析将是核选项

我们有一个稍微增长的SpringWebApp(在Tomcat7上),它的关闭速度非常慢。(这对我们持续交付的绩效有负面影响)

我的怀疑是,在@PreDestroy方法中一定有一些bean被阻塞了(或者占用了很长时间)

到目前为止,我已经通过为每个池、线程和计时器指定不同的名称并确保它们是守护进程线程或被正确关闭,来确保它与未正确关闭的线程(池)无关

有没有人解决过这样的情况,能给我一个如何应对的提示


顺便说一句:终止tomcat进程不是一个选项-我们真的需要一个干净的生产系统关闭

分析将是核选项。仅仅使用线程转储可能很容易了解正在发生的事情(特别是如果它只是阻塞线程,因为该状态将是长期存在的)。如果将两个转储相隔几秒钟,并且它们为一个或多个线程显示相同或类似的输出,那么这可能就是瓶颈。您可以使用jstack或“kill-3”(在合理的操作系统上)获得线程转储。

如果您在Windows上,则选择java控制台窗口,点击ctrl+pause将转储到该窗口-只需点击“回车”即可恢复执行

您可以尝试在应用程序上运行探查器,查看应用程序关闭时的时间。您是否检查了应用程序日志?可能在检查之前增加日志级别。您应该能够看到它在哪里消耗时间;在应用程序日志上:将所有日志级别设置为debug,但在那里看不到任何内容:(