Является ли этот неизвестный владелец тупиком ошибкой JVM, страдают ли от нее все Java-программы?

Один из наших веб-серверов перестал отвечать на любой запрос, 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)

Кажется, что монитор группы потоков удерживается каким-то неизвестным потоком. Я погуглил сообщение об ошибке "которое принадлежит UNKNOWN_owner_addr", оно привело меня к эта ветка ошибок apache:

У него точно такое же сообщение об ошибке, и предполагается, что это вызвано ошибкой JDK jemalloc.

Я не знаком с этими низкоуровневыми вещами jvm/jemalloc, они для меня как магия :). Поэтому я не уверен на 100%, что моя проблема вызвана этой ошибкой. И если я правильно понимаю ошибку jdk, значит ли это, что все программы JDK8, 11, 12 страдают от нее, любая java-программа может с крошечной вероятностью столкнуться с этим загадочным тупиком?


person Jin Mengfei    schedule 28.08.2019    source источник
comment
Аналогичная ошибка с некоторыми гипотезами: issues.apache.org/jira/browse/IMPALA-7482< /а>   -  person Juraj Martinka    schedule 28.08.2019


Ответы (1)


В итоге JDK-8215355 был признан ошибкой в ​​самой JVM, и исправление было перенесено в JDK8, сборка 8u251.

Обратите внимание, что номер версии исправления OpenJDK отличается (openjdk8u262). Я работал с AdoptOpenJDK 1.8.0_252-b09, когда впервые увидел проблему, и воспроизведение надежно не работает с этой сборкой.

person Dan Berindei    schedule 24.06.2020