1

我们的一个web服务器停止响应任何请求,jstack提示进程中存在死锁,serval线程被卡住,日志是这样的:

Found one Java-level deadlock:
=============================
"qtp728030296-143":
  waiting to lock monitor 0x00007ff8e4002528 (object 0x0000000080005b28, a java.lang.ThreadGroup),
  which is held by UNKNOWN_owner_addr=0x00007ff8d8002000

Java stack information for the threads listed above:
===================================================
"qtp728030296-143":  
at java.lang.ThreadGroup.addUnstarted(ThreadGroup.java:865)
- waiting to lock <0x0000000080005b28> (a java.lang.ThreadGroup)
at java.lang.Thread.init(Thread.java:405)
at java.lang.Thread.init(Thread.java:349)
at java.lang.Thread.<init>(Thread.java:499)
at org.eclipse.jetty.util.thread.QueuedThreadPool.newThread(QueuedThreadPool.java:558)
at org.eclipse.jetty.util.thread.QueuedThreadPool.startThreads(QueuedThreadPool.java:537)
at org.eclipse.jetty.util.thread.QueuedThreadPool.access$200(QueuedThreadPool.java:49)
at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:728)
at java.lang.Thread.run(Thread.java:748)

似乎线程组监视器由某个未知线程持有。我用谷歌搜索了错误消息“由 UNKNOWN_owner_addr 持有”,它引导我找到这个 apache 错误线程

它具有完全相同的错误消息,并且表明这是由JDK jemalloc 错误引起的

我不熟悉那些低级 jvm/jemalloc 的东西,它们对我来说就像魔法:)。所以我不能 100% 确定我的问题是否是由这个错误引起的。如果我正确理解了jdk bug,是否意味着所有的JDK8、11、12程序都受到了它的影响,任何java程序都可能遇到这种神秘的死锁,可能性很小?

4

1 回答 1

0

最终JDK-8215355被认为是 JVM 本身的一个错误,并将修复程序向后移植到 JDK8,构建 8u251。

请注意,OpenJDK 修复版本号不同(openjdk8u262)。当我第一次看到问题时,我正在使用 AdoptOpenJDK 1.8.0_252-b09 运行,并且复制器在该构建中可靠地失败了。

于 2020-06-24T13:11:03.683 回答