有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

这个“未知所有者”死锁是JVM错误吗?所有java程序都会受到它的影响吗?

我们的一个web服务器停止响应任何请求,jstack表示过程中存在死锁,多个线程被卡住,日志如下:

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)

threadgroup monitor似乎由某个未知线程控制。我在谷歌上搜索了错误消息“这是由未知的所有者持有的”,它将我带到this apache bug thread

它有完全相同的错误消息,它表明这是由a JDK jemalloc bug

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


共 (1) 个答案

  1. # 1 楼答案

    最终JDK-8215355被认为是JVM本身的一个bug,一个补丁被后传到JDK8,build 8u251

    请注意,OpenJDK修复程序的版本号不同(openjdk8u262)。当我第一次看到这个问题时,我正在使用OpenJDK 1.8.0_252-b09运行,而the reproducer在这个构建中确实失败了