当前位置: 首页 > 知识库问答 >
问题:

我怎么知道是什么阻止了spring webapp的关闭

洪富
2023-03-14

我们有一个稍微长大的Spring webapp(在tomcat 7上),关机非常慢。(这对我们持续交付的性能有负面影响)

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

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

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

顺便说一句:扼杀tomcat流程不是一个选择——我们真的需要对我们的生产系统进行干净的关闭。

共有2个答案

张岳
2023-03-14

如果你在Windows上,那么选择java控制台窗口,点击ctrl pause将转储到该窗口——只需点击“回车”即可继续执行

李振国
2023-03-14

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

 类似资料:
  • 问题内容: 我有一个主程序调用的函数: 但是在执行函数的中间会引发异常,因此它跳到了该部分。 我如何才能准确看到导致异常发生的原因? 问题答案: 其他答案都指出,您不应捕获通用异常,但是似乎没人愿意告诉您原因,这对于理解何时可以打破“规则”至关重要。这)是一个解释。基本上是这样,您不会隐藏: 发生错误的事实 发生的错误的详细信息(错误隐藏反模式) 因此,只要您不做任何事情,就可以捕获通用异常。例如

  • 但我怎么才能阻止码头服务器呢?我听说了一些关于stop.jar和start.jar的事情。我能在哪里找到它?它集成在Jetty-all-jar中吗?

  • 问题内容: 我试图在网上找到答案,但是找不到特定于实现的答案。 我可以选择,并进行了大量的业务,我想知道我怎么可以在它们之间进行选择? 我已阅读文档的onComplete和的onSuccess,但我可以从火力地堡文档,看这一个,例如,对于(如一个具体操作的示例操作),他们有时用,有时他们使用。 我怎么知道每种情况下哪个更好?有关系吗?考虑到我想知道每个操作是否成功。 问题答案: 顾名思义,将在任务

  • 我拿不到输出。。有人能帮我得到输出吗 下面给出了程序运行的示例(注意:下面的粗体文本是用户输入的输入): 进入三角形的三个边

  • 所以我遇到了这个问题,依赖项的AAR元数据(META-INF/com/android/build/gradle/AAR metadata.properties)中指定的minCompileSdk(31)大于该模块的compileSdkVersion(android-30)。 在这里回答:指定的minCompileSdk(31) 我的问题是:我怎么知道是哪个依赖关系导致了这个问题?用户laalto是