2009-09-24 12 views
6

मेरे पास एक स्टैंडअलोन प्रोग्राम है जो मैं स्थानीय रूप से चलाता हूं, यह एक सर्वर प्रकार प्रोग्राम 24/7 है। हाल ही में मैंने पाया कि इसमें एक स्मृति रिसाव है, अभी हमारे एकमात्र समाधान हर 4 घंटे इसे पुनरारंभ करना है। इस स्मृति रिसाव को खोजने के बारे में जाने का सबसे अच्छा तरीका क्या है? हम किस उपकरण और विधि का उपयोग करना चाहिए?जावा मेमोरी रिसाव को हल करने के लिए सामान्य रणनीति?

उत्तर

12

यदि आप सूर्य से जावा का उपयोग कर रहे हैं और आप कम से कम जावा 6 अपडेट 10 (यानी नवीनतम) का उपयोग करते हैं, तो उसी प्रोग्राम पर जेडीके से jvisualvm चलाने का प्रयास करें क्योंकि आपका प्रोग्राम चल रहा है, और इसके साथ संलग्न करें और प्रोफाइलिंग सक्षम करें ।

यह शुरू करने का सबसे आसान तरीका है।

+0

पिछली बार मैंने चेक किया, नवीनतम अपडेट 16 था ... :-) हालांकि यह सुनिश्चित नहीं है कि VisualVM को कब पेश किया गया था। क्या यह हाल ही में है? – PhiLho

+0

जेवीएसयूएलवीएम को 1.6.0_07 में जेडीके में जोड़ा गया था, मुझे विश्वास है। –

+1

VisualVM प्रारंभ करें। सूची से चल रही प्रक्रिया का चयन करें। राइट क्लिक करें और हीप डंप चुनें। इसे थोड़ा सा चलाने दें। एक और ढेर डंप कैप्चर करें। फिर फ़ाइल का उपयोग करें> क्या बदल गया है यह देखने के लिए मेमोरी स्नैपशॉट की तुलना करें। –

1

एक दृष्टिकोण नियमित रूप से ढेर डंप लेने के लिए होगा, फिर अपने वर्गों की आवृत्ति गणना को यह निर्धारित करने की कोशिश करें कि कौन सी वस्तुओं को लगातार बनाए रखा जा रहा है लेकिन एकत्र नहीं किया गया है।

एक और समस्या है जहां समस्या को कम करने की कोशिश करने के लिए आपके ऐप के कुछ हिस्सों को बंद करना होगा।

jmap और jhat जैसे टूल देखें।

2

आप जावा के साथ जहाजों जेएमएक्स और जेकनसोल ऐप देख सकते हैं। आप बॉक्स के बाहर कुछ दिलचस्प आंकड़े प्राप्त कर सकते हैं, और अपने वर्गों में कुछ सरल उपकरण जोड़ना बहुत अधिक प्रदान कर सकता है।

7

जब स्मृति समस्याओं की शिकार करने की बात आती है, तो मैं SAP Memory Analyzer Eclipse Memory Analyser (MAT), एक हीप डंप विश्लेषण टूल का उपयोग करता हूं।

मेमोरी विश्लेषक जावा हीप डंप का विश्लेषण करने के लिए एक सामान्य उद्देश्य टूलकिट प्रदान करता है। रखरखाव के आकार और तेज गणना के अलावा, ग्रहण उपकरण रिसाव संदिग्धों और स्मृति खपत विरोधी पैटर्न की रिपोर्ट करता है। आवेदन का मुख्य क्षेत्र मेमोरी त्रुटियों और उच्च स्मृति खपत से बाहर हैं।

एसएपी द्वारा शुरू किया गया, इस परियोजना को तब से खोला गया है और अब Eclipse Memory Analyser के रूप में जाना जाता है। leak report चल स्वचालित रूप से स्मृति लीक के लिए जाँच करने से

प्रारंभ: Getting Started पेज और विशेष रूप से Finding Memory Leaks खंड (मैं नीचे, क्योंकि मैं कुछ लिंक तय चिपकाने हूँ) की जाँच करें।

यह ब्लॉग विवरण How to Find a Leaking Workbench Window है।

मेमोरी विश्लेषक एसएपी में बड़ा हुआ। उसके बाद, क्रम ने लगभग Finding Memory Leaks with SAP Memory Analyzer ब्लॉग किया। सामग्री अभी भी प्रासंगिक है!

यह संभवतः हेप डंप विश्लेषण (और मेमोरी लीक) के लिए आपको सबसे अच्छा टूल (पैसे के लिए) मिल सकता है।

पीएस: मैं एसएपी/आईबीएम/ग्रहण के लिए काम नहीं करता, मैं सकारात्मक प्रतिक्रिया के साथ बस एक बहुत ही खुश एमटी उपयोगकर्ता हूं।

1

जैसा कि पहले से ही कहा गया है कि jvisualvm शुरू करने का एक शानदार तरीका है, लेकिन एक बार जब आप जानते हैं कि लीकिंग क्या है, तो आपको यह जानने की आवश्यकता हो सकती है कि प्रश्नों के संदर्भ में क्या संदर्भ है, जिसके लिए मैं jmap और jhat, e की सिफारिश करता हूं।जी

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

और

jhat heap.dump.out 

जहां < पीआईडी ​​> आसानी से jvisualvm से पाया जाता है। फिर ब्राउज़र में स्थानीयहोस्ट पर नेविगेट करें: 7000 और एक्सप्लोर करना शुरू करें।

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