【问题标题】:Is there any way to kill the running the deadlock thread "http:8080-42" which blocked all other thread有没有办法杀死正在运行的死锁线程“http:8080-42”,它阻塞了所有其他线程
【发布时间】:2014-03-19 05:42:47
【问题描述】:

我们有一个应用程序泄漏了一点内存,这有点轻描淡写。

我正在使用 jstack 来尝试找出导致问题的原因。

我发现以 http-8080-42 开头的线程的线程数增长了很多

示例:

“http-8080-13”守护进程prio=10 tid=0x00002aacb4ae6000 nid=0x5ddf 等待监视器条目[0x0000000043e65000] java.lang.Thread.State: BLOCKED (在对象监视器上) 在 com.reg_dashboard.DataModel.findRegsRow(DataModel.java:280) - 等待锁定 (com.reg_dashboard.DataModel 的 java.lang.Class)

我的第一个猜测是,这些线程中的每一个都是来自客户端的请求,它正在等待某种同步块。 我的问题是这些线程已经运行了很长时间(到目前为止 10 分钟)。

我的问题是这样的:

有什么方法可以杀死导致我的应用程序挂起的线程???有一些请求正在加载 catche 并被卡住,其他进程正在等待对象被解锁!

【问题讨论】:

    标签: java tomcat


    【解决方案1】:

    有什么方法可以杀死导致我的应用程序的线程 挂???

    不太可能。底层 JVM 实现应该知道当外部进程杀死它的一个线程时如何做出反应。您可能会将 VM 置于不一致的状态。

    你已经知道死锁在哪里了。较新的虚拟机几乎可以告诉您哪些线程彼此死锁。从源头解决问题,而不是试图杀死线程。谁说杀死锁定的线程10秒后线程不会死锁(假设甚至可以工作)。

    如果您想更深入地了解应用程序中的锁定机制,我建议您使用像 JProfiler 这样的工具。您可以更快地解决问题。我指的是Monitor profiling 部分。

    【讨论】:

      猜你喜欢
      • 2021-11-04
      • 1970-01-01
      • 2011-11-29
      • 1970-01-01
      • 1970-01-01
      • 2013-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多