JVM は、デッドロックが発生したことを通知します。
Found one Java-level deadlock:
=============================
"TP-Processor107":
waiting for ownable synchronizer 0x00002aaaf58e70f0, (a java.util.concurrent.locks.ReentrantReadWriteLock$NonfairSync),
which is held by "indexTrackerThread3"
"indexTrackerThread3":
waiting for ownable synchronizer 0x00002aaaf4394580, (a java.util.concurrent.locks.ReentrantReadWriteLock$NonfairSync),
which is held by "TP-Processor16"
"TP-Processor16":
waiting for ownable synchronizer 0x00002aaaf58e70f0, (a java.util.concurrent.locks.ReentrantReadWriteLock$NonfairSync),
which is held by "indexTrackerThread3"
indexTrackerThread3
がによって保持されているリソースを待機していることがわかりますTP-Processor16
。また、その逆も同様です。それはまさにデッドロックです。
indexTrackerThread3
を待っていることがわかります0x00002aaaf4394580
:
"indexTrackerThread3":
- parking to wait for <0x00002aaaf4394580>
私の質問:
スレッド ダンプに行がないのはなぜ- locked <0x00002aaaf4394580>
ですか?
0x00002aaaf58e70f0 は実際にはどのスレッドにもロックされていないようです。何がそれをロックしている可能性がありますか?
私が読んだすべてのデッドロック ドキュメント ( example ) では、異なる行ごと- parking to wait for <0x123>
に常に 1- locked <0x123>
行あります。そこで、JVM のバグを疑い始めました。私は何か誤解していますか?
注: ペーストビンにリンクして申し訳ありませんが、完全なダンプがなければ質問に答えることはできません。簡潔にするために、" at" を含むすべての行を削除しました。これらの行にはロック情報は含まれていません。