JVM मुझसे कहता है कि एक गतिरोध उत्पन्न हो गई है द्वारा बंद नहीं:"मिला 1 गतिरोध" लेकिन निशान से पता चलता है कि किसी भी धागा
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
द्वारा आयोजित के लिए इंतज़ार कर रहा है, और इसके -versa। यह वास्तव में एक डेडलॉक है।
हम देख सकते हैं कि indexTrackerThread3
0x00002aaaf4394580
के लिए इंतज़ार कर रहा है:
"indexTrackerThread3":
- parking to wait for <0x00002aaaf4394580>
मेरा प्रश्न:
the threads dump में, क्यों वहाँ कोई लाइन - locked <0x00002aaaf4394580>
है?
ऐसा लगता है कि 0x00002aaaf58e70f0 वास्तव में किसी भी थ्रेड द्वारा लॉक नहीं है। क्या लॉक हो सकता है?
सभी डेडलॉक दस्तावेज में मैंने पढ़ा है (example), प्रत्येक अलग - parking to wait for <0x123>
लाइन के लिए, हमेशा एक - locked <0x123>
लाइन होती है। तो मैं एक जेवीएम बग पर संदेह करना शुरू कर देता हूं। क्या मैं कुछ गलत समझ रहा हूँ?
नोट: पेस्टबिन से जोड़ने के लिए खेद है, लेकिन सवाल पूर्ण डंप के बिना उत्तरदायी नहीं है। संक्षिप्तता के लिए, मैंने "लाइन" में मौजूद सभी पंक्तियों को हटा दिया, उनमें कोई ताला जानकारी शामिल नहीं है।
लिंक के लिए धन्यवाद! अब मैंने खुद को असुरक्षित वर्ग से परिचित कर दिया है। यहां तक कि जब Unsafe.park पर कॉल के माध्यम से किया जाता है, तब भी लॉकिंग जावा कॉल से आता है, तो उस लाइन पर '<0x123>' लॉक क्यों नहीं लिखा जाएगा? मैं मौजूद आईडी के विशेष मुद्दे के बारे में बात करने वाले किसी दस्तावेज़ को सराहना करता हूं। –