आम तौर पर, मैं जो भी उपयोग करता हूं वह एक्लिप्स मेमोरी एनालाइजर केParseHeapDump.sh
भीतर शामिल है और यहां वर्णित है , और मैं ऐसा करता हूं कि हमारे एक और अधिक बीफेड सर्वर (डाउनलोड करें और लिनक्स पर कॉपी करें। ज़िप डिस्ट्रो, अनज़िप)। शेल स्क्रिप्ट को GUI से हीप को पार्स करने की तुलना में कम संसाधनों की आवश्यकता होती है, साथ ही आप इसे अपने बीफ़ सर्वर पर अधिक संसाधनों के साथ चला सकते हैं (आप स्क्रिप्ट की अंतिम पंक्ति के अंत में कुछ ऐसा जोड़कर अधिक संसाधन आवंटित कर सकते हैं । उदाहरण के लिए। संशोधन के बाद उस फ़ाइल की अंतिम पंक्ति इस तरह दिख सकती है-vmargs -Xmx40g -XX:-UseGCOverheadLimit
./MemoryAnalyzer -consolelog -application org.eclipse.mat.api.parse "$@" -vmargs -Xmx40g -XX:-UseGCOverheadLimit
इसे वैसे ही चलाएं ./path/to/ParseHeapDump.sh ../today_heap_dump/jvm.hprof
उसके बाद सफल होने पर, यह .hprof फ़ाइल के बगल में "इंडेक्स" फ़ाइलों की संख्या बनाता है।
सूचकांकों को बनाने के बाद, मैं उस से रिपोर्ट उत्पन्न करने की कोशिश करता हूं और उन रिपोर्टों को अपनी स्थानीय मशीनों को सौंपता हूं और यह देखने की कोशिश करता हूं कि क्या मैं अपराधी को सिर्फ उसी से मिल सकता हूं (न केवल रिपोर्टों से, बल्कि सूचकांकों से)। रिपोर्ट बनाने का ट्यूटोरियल यहां दिया गया है ।
उदाहरण रिपोर्ट:
./ParseHeapDump.sh ../today_heap_dump/jvm.hprof org.eclipse.mat.api:suspects
अन्य रिपोर्ट विकल्प:
org.eclipse.mat.api:overview
तथा org.eclipse.mat.api:top_components
यदि वे रिपोर्ट पर्याप्त नहीं हैं और अगर मुझे कुछ और खुदाई की आवश्यकता है (अर्थात ओक्काल के माध्यम से कहूं), तो मैं सूचकांकों के साथ-साथ अपने स्थानीय मशीन को hprof फ़ाइल को स्कैन करता हूं, और फिर हीप डंप (उसी तरह सूचकांकों के साथ) खोलें मेरे ग्रहण मेट जीयूआई के साथ ढेर डंप)। वहां से, इसे चलाने के लिए बहुत अधिक मेमोरी की आवश्यकता नहीं है।
संपादित करें:
मुझे सिर्फ दो नोट जोड़ना पसंद है:
- जहां तक मैं जानता हूं, केवल सूचकांकों की पीढ़ी ही ईएलटीई मैट का मेमोरी इंटेंसिव पार्ट है। आपके पास सूचकांकों के बाद, ग्रहण मेट से आपके अधिकांश प्रसंस्करण को उतनी मेमोरी की आवश्यकता नहीं होगी।
- शेल स्क्रिप्ट पर ऐसा करने का मतलब है कि मैं इसे एक हेडलेस सर्वर पर कर सकता हूं (और मैं इसे सामान्य रूप से हेडलेस सर्वर पर भी कर सकता हूं, क्योंकि वे सामान्य रूप से सबसे शक्तिशाली होते हैं)। और अगर आपके पास एक सर्वर है जो उस आकार के ढेर डंप को उत्पन्न कर सकता है, तो संभावना है, आपके पास एक और सर्वर है जो उस ढेर के ढेर को भी संसाधित कर सकता है।
ArrayIndexOutOfBoundsException
कम से कम में सुविधाओं दो कीड़े । मैं यह बता रहा हूँ क्योंकि आपने MAT को चलाने के दौरान किसी OOME की सूचना नहीं दी है , जिसका एक अलग निर्धारण है ।