我们有一个稍微增长的弹簧webapp(在tomcat 7上),关机时非常慢。 (这对我们的持续交付表现有负面影响)
我的怀疑是,必须有一些bean在它的@PreDestroy方法中阻塞(或花费很长时间)。
到目前为止,通过为每个池,线程和计时器提供不同的名称并确保它们是守护程序线程或正确关闭,我确保它与未正确关闭的线程(池)无关。
有没有人解决过这样的情况并能给我一个如何处理这个问题的提示?
BTW:杀死tomcat进程不是一个选项 - 我们真的需要为我们的生产系统进行干净关闭。答案 0 :(得分:2)
剖析将是核选择。只是使用线程转储,可能很容易得到正在发生的事情的图片(特别是如果它只是被阻塞的线程,因为该状态将很长时间)。如果您将两个转储分隔几秒钟,并且它们为一个或多个线程显示相同或相似的输出,那么这可能是瓶颈。您可以使用jstack或“kill -3”(在合理的操作系统上)获取线程转储。
答案 1 :(得分:0)
如果你在Windows上,那么选择java控制台窗口,然后按ctrl + pause将转储到该窗口 - 只需点击'enter'即可恢复执行