有没有办法杀死运行死锁线程" http:8080-42"这阻止了所有其他线程

时间:2014-03-19 05:42:47

标签: java tomcat

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

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

我看到线程数在以名称开头的线程上增长了很多:http-8080-42

示例:

" HTTP-8080-13" daemon prio = 10 tid = 0x00002aacb4ae6000 nid = 0x5ddf等待监视器输入[0x0000000043e65000]    java.lang.Thread.State:BLOCKED(在对象监视器上)     at com.reg_dashboard.DataModel.findRegsRow(DataModel.java:280)      - 等待锁定< 0x00002aaab0c996b0> (com.reg_dashboard.DataModel的java.lang.Class)

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

我的问题是:

有没有办法杀死这个导致我的应用程序挂起的线程???有一些请求正在加载catche并卡住了,其他进程正在等待对象解锁!

1 个答案:

答案 0 :(得分:1)

  

有没有办法杀死导致我的应用程序的这个线程   要挂?

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

你已经知道死锁的位置。较新的VM几乎可以告诉您哪些线程彼此死锁。解决问题的来源,而不是试图杀死线程。谁能说杀死锁定线程后10秒内线程不会死锁(假设它甚至可以工作)。

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