java - 有什么办法可以杀死正在运行的死锁线程 "http:8080-42",它阻塞了所有其他线程

标签 java tomcat

我们有一个应用程序泄漏了一点内存,有点保守。

我正在使用 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) - 等待锁定 <0x00002aaab0c996b0>(com.reg_dashboard.DataModel 的 java.lang.Class)

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

我的问题是:

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

最佳答案

Is there any way to kill this thread which is causing my application to hang???

不太可能。底层 JVM 实现应该知道如何在外部进程终止其中一个线程时使用react。您可能会将 VM 置于不一致的状态。

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

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

关于java - 有什么办法可以杀死正在运行的死锁线程 "http:8080-42",它阻塞了所有其他线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22497231/

相关文章:

java - 在数组中查找重复数字时出现问题,是我的技术不好吗?

java - 匿名变量(?)的优点?

java - 如何提交带有复选框的表单?

JavaFX - 多个语句的 TextField 输入验证

java - HTTP 状态 404 -/ssssnpm//promotional.jsp 错误

java - 我在背包问题的递归中得到不同的值

java - Servlet 需要访问嵌入在 war 文件中的 SQLite DB

tomcat - 我如何将 servlet 映射定向到此 url

java - 需要解决 Tomcat 在记录器被处理后尝试记录事件的 webapp 错误

java - Tomcat web.xml url 映射