Die JVM mir sagt, dass ein Deadlock aufgetreten ist:„Gefunden 1 Deadlock“, aber Spur zeigt, dass nicht von einem Thread gesperrt
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"
Wir können sehen, dass indexTrackerThread3
für eine Ressource von TP-Processor16
gehalten warten, und vice -versa. Das ist in der Tat eine Sackgasse.
Wir können sehen, dass indexTrackerThread3
wartet auf 0x00002aaaf4394580
:
"indexTrackerThread3":
- parking to wait for <0x00002aaaf4394580>
Meine Frage:
In the threads dump, warum gibt es keine Linie - locked <0x00002aaaf4394580>
?
Es scheint wie 0x00002aaaf58e70f0 ist eigentlich nicht durch einen Thread gesperrt. Was könnte es sperren?
In allen Deadlock-Dokumentation habe ich gelesen (example), für jede andere - parking to wait for <0x123>
Zeile gibt es immer eine - locked <0x123>
Zeile. Ich beginne also einen JVM-Bug zu vermuten. Versteh ich etwas falsch?
Hinweis: Entschuldigung für die Verbindung zu Pastebin, aber die Frage ist nicht zu verantworten, ohne die vollständige Dump. Der Kürze halber entfernte ich alle Zeilen, die "at" enthielten, sie enthielten keine Sperrinformationen.
Danke für den Link! Ich habe mich jetzt mit der unsicheren Klasse vertraut gemacht. Selbst wenn sie über einen Aufruf von Unsafe.park ausgeführt werden, kommt die Sperrung immer noch von einem Java-Aufruf. Warum also sollte der "locked <0x123>" -Teil nicht in dieser Zeile geschrieben sein? Ich würde mich über jede Dokumentation freuen, die über das besondere Problem spricht, dass ich nicht anwesend bin. –