加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java线程转储:BLOCKED线程没有“等待锁…”

发布时间:2020-12-15 00:07:04 所属栏目:Java 来源:网络整理
导读:我很难理解从jstack获取的线程转储,用于在Tomcat 6( java 1.6.0_22,Linux)上运行的Spring MVC Web应用程序. 我看到阻塞线程(导致其他线程等待),这些线程自动阻塞,但是线程转储不告诉我为什么或正在等待哪个监视器. 例: "TP-Processor75" daemon prio=10 tid
我很难理解从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?描述了类似的情况,所以我相信这些线程被垃圾回收器简单地阻止.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读