2008-09-28 17 views
15

मैं एक जावा एप्लिकेशन में एक स्मृति 'रिसाव' प्राप्त करने में कामयाब रहा हूं जिसे मैं विकसित कर रहा हूं। मेरे जुनीट टेस्ट सूट को चलाने पर मैं यादृच्छिक रूप से मेमोरी अपवादों से बाहर निकलता हूं (java.lang.OutOfMemoryError)।मैं जावा में अपने ढेर में क्या देख सकता हूं?

मेरे जावा एप्लिकेशन के ढेर की जांच करने के लिए मैं कौन से टूल्स का उपयोग कर सकता हूं यह देखने के लिए कि मेरे सारे ढेर का उपयोग क्या हो रहा है ताकि मैं उन वस्तुओं के संदर्भों को ध्यान में रख सकूं जो कचरा इकट्ठा करने में सक्षम होना चाहिए।

उत्तर

23

विजुअलVM जावा की सबसे हालिया रिलीज में शामिल है। आप इसका उपयोग एक हीप डंप बनाने के लिए कर सकते हैं, और इसमें ऑब्जेक्ट्स को देख सकते हैं।

वैकल्पिक रूप से, आप भी jmap का उपयोग कर एक heapdump commandine (अपने JDK/bin निर्देशिका में) बना सकते हैं:

jmap -dump:format=b,file=heap.bin <pid> 

तुम भी उपयोग कर सकते हैं सभी वस्तुओं की एक त्वरित हिस्टोग्राम पाने के लिए

jmap -histo <pid> 

मैं हेप डंप के उन्नत विश्लेषण के लिए एक्लिप्स मेमोरी विश्लेषक (http://eclipse.org/mat) की सिफारिश कर सकता हूं। यह आपको यह पता लगाने देता है कि क्यों एक निश्चित वस्तु या वस्तुओं का सेट जीवित है। यहां एक ब्लॉग एंट्री है जो आपको दिखाती है कि मेमोरी विश्लेषक क्या कर सकता है: http://dev.eclipse.org/blogs/memoryanalyzer/2008/05/27/automated-heap-dump-analysis-finding-memory-leaks-with-one-click/

+0

विजुअल वीएम और नेटबींस प्रोफाइलर आपको ईएमए जैसी चीजों को करने की अनुमति देता है। –

+1

मुझे नेटबीन के बारे में पता नहीं है, लेकिन मुझे निश्चित रूप से दृश्य वीएम में 'जीसी रूट के लिए सबसे छोटा रास्ता' नहीं मिला है। EMA - lifesaver के लिए – Tom

+1

+1। –

0

यदि आप जीटीके का समर्थन करने वाली प्रणाली का उपयोग कर रहे हैं तो आप JMP का उपयोग करने का प्रयास कर सकते हैं।

6

आप कुछ मुफ्त की जरूरत है, इस परियोजना का वर्णन से VisualVM

कोशिश :

विजुअलVM एक विजुअल टूल है जो कमांडलाइन जेडीके टूल्स और लाइटवेट प्रोफाइलिंग क्षमताओं को एकीकृत करता है। विकास और उत्पादन समय दोनों के उपयोग के लिए बनाया गया है।

0

आप मेमोरी लीक डिटेक्टर का प्रयास कर सकते हैं जो जेआरॉकिट मिशन कंट्रोल टूल्स सूट का हिस्सा है। JVM चल रहा है, जबकि यह आपको ढेर का निरीक्षण करने की अनुमति देता है। आपको हर समय स्नैपशॉट लेने की आवश्यकता नहीं है। आप सिर्फ JVM पर ऑनलाइन कनेक्ट कर सकते हैं और फिर देखें कि कचरा संग्रह के बीच ढेर कैसे बदलता है। आप वस्तुओं का निरीक्षण भी कर सकते हैं, ग्राफिक रूप से संदर्भों का पालन कर सकते हैं और वर्तमान में ऑब्जेक्ट आवंटित करने वाले स्थान से स्टैक निशान प्राप्त कर सकते हैं। यहां एक संक्षिप्त introduction है।

उपकरण विकास के लिए उपयोग करने के लिए स्वतंत्र है और आप इसे here डाउनलोड कर सकते हैं।

1

उपयोग Eclipse Memory Analyzer

वहाँ कोई अन्य उपकरण है कि मैं किसी भी उपकरण है जो करीब आता है यह कार्यक्षमता और प्रदर्शन और मूल्य (स्वतंत्र और खुला स्रोत) है करने के लिए के बारे में पता कर रहा हूँ जब विश्लेषण करने ढेर डंप।

2

यह एक बहुत पुराना सवाल है। बहुत से लोगों ने इंटेलिजे का उपयोग करना शुरू कर दिया है क्योंकि इसका मूल रूप से उत्तर दिया गया था। IntelliJ में एक प्लगइन है जो JVM Debugger Memory View नामक स्मृति उपयोग दिखा सकता है।

+0

थोड़ी देर के लिए विभिन्न उपकरणों के साथ खेलने के बाद, मैंने पाया कि इंटेलिजे में एक [VisualVM के लिए प्लगइन] है [https://plugins.jetbrains.com/plugin/7115-visualvm-launcher) (एक अलग उत्तर में उल्लिखित)। वह संयोजन मेरे लिए सबसे अच्छा काम कर रहा है। – mkasberg

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