2010-11-13 14 views
6

आम तौर पर जब मैं थ्रेड डंप के लिए पूछता हूं, तो खराब प्रदर्शन प्रणाली के लक्षण आसानी से समझाए जाते हैं; यानी मैं सामान्य रूप से देख सकता हूं कि कई धागे स्पष्ट रूप से मॉनीटर पर इंतजार कर रहे हैं जो अधिग्रहित किया गया है लेकिन किसी अन्य द्वारा जारी नहीं किया गया है।जावा थ्रेड ऑब्जेक्ट को लॉक करने की प्रतीक्षा कर रहे हैं जो (दृश्यमान रूप से) लॉक नहीं है

इस मामले में, मेरे पास मॉनिटर (0x965ad100) के लिए बहुत सारे धागे इंतजार कर रहे हैं, लेकिन किसी भी मॉनिटर को पहले स्थान पर नहीं दिखता है। सवाल में सूत्र इस हस्ताक्षर के साथ पहचाना जा सकता है:

लॉक करने के लिए < 0x965ad100> (एक uk.gov.dti.og.fox.ConAgent)

मैं इस Googling की कोशिश की है इंतज़ार कर, और मुझे लगता है कि वे पोस्ट हैं जो लॉक किए गए मॉनीटर पर चर्चा करते हैं, लॉक नहीं होने वाले मॉनीटर की प्रतीक्षा करने के बारे में कुछ भी नहीं। पूर्ण में

थ्रेड डंप: http://www.basson.at/docs/stackoverflow/thread_dump.txt

मुझे आशा है कि किसी को यहाँ मैं क्या देख रहा हूँ, या कम से कम सही दिशा में मुझे बात समझा सकते हैं। किसी भी प्रतिक्रिया के लिए अग्रिम धन्यवाद।

+0

BTW में नीचे तीर के माध्यम से सुलभ का उपयोग कर इसे सक्षम कर सकते हैं, (0x96560c48) –

उत्तर

1

यह संभव है (हालांकि असंभव) कि थ्रेड ने केवल थ्रेड डंप लिया था जब मॉनिटर को मॉनिटर जारी किया था। मॉनिटर जारी होने के बीच एक संक्षिप्त अवधि हो सकती है और अगला थ्रेड इसे प्राप्त करता है। यदि आप वास्तविक डेडलॉक में नहीं हैं, तो यह समझा सकता है कि आप क्या देख रहे हैं। एक और थ्रेड डंप आज़माएं और उसे जांचें।

अधिक संभावना है कि वहां कहीं भी एक धागा है जो पहले से ही मॉनीटर रखता है। कभी-कभी यह स्पष्ट नहीं है। आपके स्टैक निशान में कुछ "लॉक" लाइनें होती हैं जो कुछ ताले रखने वाले धागे सूचीबद्ध करती हैं, लेकिन वह सूची जरूरी नहीं है। उदाहरण के लिए, मुझे संदेह है कि जेएनआई के माध्यम से प्राप्त ताले सूचीबद्ध नहीं हैं।

यदि आप बिल्ट-इन लॉक को प्रतिस्थापित कर सकते हैं, उदा। java.util.concurrent.locks.ReentrantLock, तो आप प्रोग्राम को निलंबित कर सकते हैं और एक डीबगर संलग्न कर सकते हैं, उस लॉक को ढूंढ सकते हैं जिसकी आप परवाह करते हैं, और getOwner विधि का उपयोग कर लॉक स्वामी को ढूंढें।

1

यदि आप एक्लिप्स का उपयोग कर रहे हैं, तो आप डिबग व्यू के माध्यम से अंतर्निहित लॉक व्यूअर का उपयोग कर सकते हैं जो सहायक हो सकता है। आप क्योंकि यह एक ही ताला यह पहले से ही हासिल कर ली है के लिए इंतजार कर रहा है तो आप बेहतर जाँच क्या है थ्रेड-9 कर ड्रॉप डाउन मेनू उपकरण पट्टी :)

alt text

संबंधित मुद्दे