पहले मैसेज पढ़ें, क्योंकि heap space, metaspace, direct buffer और GC overhead limit exceeded बिल्कुल अलग अलग वजहों की ओर इशारा करते हैं। heap dump on out of memory के साथ चलाएं ताकि नाकामी के वक्त की हालत कैद हो जाए, फिर उस dump को किसी memory analyzer में खोलें और dominator tree देखें कि सबसे ज्यादा कौन रोके हुए है। समय के साथ dumps की तुलना करें ताकि असली leak और उस working set में फर्क कर सकें जो बस heap से बड़ा है।
इंटरव्यूअर यह क्यों पूछते हैं
इंटरव्यूअर दोहराया जा सकने वाला तरीका और टूलिंग की जान पहचान देखना चाहते हैं। error के रूपों में फर्क करना तेजी से भरोसा जगाता है, और वही आम मुजरिमों को जानना भी: बिना हद वाले caches, pooled threads पर पड़े thread locals, redeploy पर class loader leaks, और ऐसी queries जो पूरी table उठा लाती हैं। वे यह भी जांच रहे हैं कि आप सिर्फ heap size बढ़ाकर उसे ठीक हुआ नहीं मान लेंगे।
अपना जवाब कैसे स्ट्रक्चर करें
- थ्योरी बनाने से पहले error का ठीक ठीक रूप पढ़ें।
- नाकामी पर अपने आप heap dump कैद करें।
- shallow गिनती नहीं, retained size और dominator tree का विश्लेषण करें।
- हद वाले cache या streamed query से उपाय पक्का करें, फिर तस्दीक करें।
उदाहरण जवाब
रूप मायने रखता है। Java heap space का मतलब है कि live ऑब्जेक्ट सचमुच heap भर रहे हैं, metaspace का मतलब है classes लोड हो रही हैं और कभी छूटती नहीं, और direct buffer वाली error मेरे ऑब्जेक्ट्स की नहीं, NIO या किसी native library की ओर इशारा करती है। तो मैं पहले वही पढ़ता हूं, फिर पक्का करता हूं कि JVM heap dump on out of memory के साथ चल रही है और dump का रास्ता ऐसे volume पर है जो restart के बाद भी बचे, क्योंकि dump के बिना अंदाजे लगाना दिन बर्बाद करता है। dump मिलने पर मैं shallow नहीं, retained size देखता हूं, और dominator tree आमतौर पर दो मिनट में मुजरिम का नाम बता देता है। जो मुझे असल में मिलता है वह बार बार वही होता है: cache की तरह इस्तेमाल हो रहा map जिसमें कोई eviction नहीं, pooled thread पर सेट किया गया thread local जो कभी साफ नहीं हुआ इसलिए pool जितना लंबा जीता है, या ऐसा repository method जो हर row लौटा देता है क्योंकि किसी ने pagination हटा दी। मैं garbage collection logs भी देखता हूं कि heap लगातार चढ़ रहा था या खास requests पर उछल रहा था। उपाय है किसी चीज पर हद लगाना, अधिकतम size और expiry वाला cache, या query को stream करना, और फिर मैं हफ्ते भर live set देखता हूं कि वह सपाट है।
जल्दी ही यह इंटरव्यू देने जा रहे हैं? GhostPilot आपकी लाइव कॉल सुनता है, सवाल पूछे जाते ही उसे पकड़ लेता है, और रियल-टाइम में एक स्ट्रक्चर्ड जवाब आपकी स्क्रीन पर डाल देता है। अगले मॉक में इसे आजमाएं, या ले लें एक $29 Session Pass, कोई सब्सक्रिप्शन नहीं, असली इंटरव्यू के लिए।
देखें यह कैसे काम करता हैफॉलो-अप सवाल जिनकी उम्मीद रखें
- leak और बस बहुत बड़े working set में आप फर्क कैसे करते हैं?
- metaspace की error खास तौर पर किससे होती है?
- pooled thread पर thread locals कैसे leak करते हैं?
Java डेवलपर के और सवाल
आपका इंटरव्यूअर इसका अपना वर्ज़न पूछेगा। फ्री Question Predictor में अपना असली जॉब डिस्क्रिप्शन पेस्ट कीजिए और वो 20 सवाल पाइए जो उस रोल में सबसे ज्यादा पूछे जाने की संभावना है, साथ में यह भी कि हर सवाल असल में क्या टटोल रहा है।
मेरे सवाल प्रेडिक्ट करें