gpt4 book ai didi

Java 线程转储 : BLOCKED thread without "waiting to lock ..."

转载 作者:IT老高 更新时间:2023-10-28 20:53:50 34 4
gpt4 key购买 nike

我很难理解从 jstack 获得的线程转储,用于在 Tomcat 6(java 1.6.0_22,Linux)上运行的 Spring MVC Web 应用程序。

我看到自己被阻塞的阻塞线程(导致其他线程等待),但是线程转储并没有告诉我他们等待的原因或等待哪个监视器。

例子:

"TP-Processor75" daemon prio=10 tid=0x00007f3e88448800 nid=0x56f5 waiting for monitor entry [0x00000000472bc000]
java.lang.Thread.State: BLOCKED (on object monitor)
at java.lang.Class.initAnnotationsIfNecessary(Class.java:3067)
- locked <0x00007f3e9a0b3830> (a java.lang.Class for org.catapultframework.resource.ResourceObject)
at java.lang.Class.getAnnotation(Class.java:3029)
...

即我错过了堆栈跟踪中的“等待锁定...”行。显然线程锁定了一个 Class 对象,但我不明白为什么线程本身被阻塞。

线程转储不包含任何死锁提示。

如何识别锁定监视器?

谢谢,奥利弗

最佳答案

显然,我们观察到这类阻塞线程的情况与大量内存消耗和大量垃圾收集有关。

这个问题Java blocking issue: Why would JVM block threads in many different classes/methods?描述了类似的情况,所以我相信这些线程只是被垃圾收集器阻塞了。

(无论如何,在解决了内存问题后,阻塞线程的问题就消失了。)

关于Java 线程转储 : BLOCKED thread without "waiting to lock ...",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7067058/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com