jstack या jcmd से thread dump लें, बेहतर हो कुछ सेकंड के अंतर पर दो, और अटके हुए थ्रेड्स देखें। JVM lock cycles खुद पकड़ता है और सीधे एक Java level deadlock वाला हिस्सा छापता है। अगर कोई cycle न हो, तो शायद थ्रेड्स किसी संसाधन पर ब्लॉक हैं, जैसे connection pool या बिना timeout वाला socket read। उपाय है locks को एक ही क्रम में लेना, critical section छोटा करना, या timeouts जोड़ना।
इंटरव्यूअर यह क्यों पूछते हैं
इंटरव्यूअर जानना चाहते हैं कि आप सिर्फ कोड पढ़ने वाले नहीं, चलती हुई JVM डिबग करने वाले हैं। तुरंत thread dump की तरफ हाथ बढ़ाना, और यह जानना कि JVM खुद deadlock का नाम बता देता है, भरोसे का संकेत है। वे बचाव भी टटोल रहे हैं: locks का एक जैसा क्रम, timeout के साथ tryLock, और lock पकड़े हुए कभी remote call न करना, क्योंकि असली deadlocks ज्यादातर इसी तरह बनते हैं।
अपना जवाब कैसे स्ट्रक्चर करें
- कई thread dumps लें और तुलना करें कि क्या अटका है।
- पहले deadlock वाला हिस्सा देखें, फिर blocked और waiting हालतें।
- lock cycle को resource starvation या गायब timeout से अलग करें।
- कोड में आप जो बचाव के नियम लागू करते हैं वे बताएं।
उदाहरण जवाब
पहली चीज thread dump है, और मैं कुछ सेकंड के अंतर पर दो तीन लेता हूं ताकि सचमुच अटकी चीज और बस व्यस्त चीज में फर्क कर सकूं। JVM यहां काफी काम खुद कर देता है: अगर दो थ्रेड्स एक दूसरे के monitors पकड़े हैं तो वह Java level deadlock वाला हिस्सा छापता है जिसमें दोनों थ्रेड्स और दोनों locks के नाम होते हैं, और फिर stack traces ठीक ठीक बता देते हैं कि कौन से methods देखने हैं। अगर कोई cycle न हो, तो पैटर्न आमतौर पर अलग होता है: दर्जनों थ्रेड्स उसी connection pool पर waiting हालत में, जिसका मतलब है कि कोई connections पकड़े बैठा है, क्लासिक deadlock नहीं, या थ्रेड्स बिना timeout सेट किए socket read में ब्लॉक हैं, जो सामने वाला जवाब देना बंद कर दे तो अनंत काल तक अटका रहता है। बचाव के लिए मेरे कुछ नियम हैं। locks एक जैसे क्रम में लिए जाते हैं, और जहां दो हों वहां मैं वह क्रम लिखकर रखता हूं। मैं critical section जितना छोटा हो सके रखता हूं और lock पकड़े हुए कभी network call नहीं करता या message publish नहीं करता। और जहां डिजाइन इजाजत दे वहां मैं timeout के साथ tryLock लेता हूं, ताकि contention अटकने की जगह संभाली हुई error बन जाए।
जल्दी ही यह इंटरव्यू देने जा रहे हैं? GhostPilot आपकी लाइव कॉल सुनता है, सवाल पूछे जाते ही उसे पकड़ लेता है, और रियल-टाइम में एक स्ट्रक्चर्ड जवाब आपकी स्क्रीन पर डाल देता है। अगले मॉक में इसे आजमाएं, या ले लें एक $29 Session Pass, कोई सब्सक्रिप्शन नहीं, असली इंटरव्यू के लिए।
देखें यह कैसे काम करता हैफॉलो-अप सवाल जिनकी उम्मीद रखें
- बिना shell वाले container से आप thread dump कैसे लेंगे?
- dump में blocked, waiting और timed waiting में क्या फर्क है?
- किसी संदिग्ध deadlock को आप test में दोबारा कैसे पैदा करेंगे?
Java डेवलपर के और सवाल
आपका इंटरव्यूअर इसका अपना वर्ज़न पूछेगा। फ्री Question Predictor में अपना असली जॉब डिस्क्रिप्शन पेस्ट कीजिए और वो 20 सवाल पाइए जो उस रोल में सबसे ज्यादा पूछे जाने की संभावना है, साथ में यह भी कि हर सवाल असल में क्या टटोल रहा है।
मेरे सवाल प्रेडिक्ट करें