2009-11-30 35 views
12

के भीतर जावा हीप डंप (कोर डंप) का अनुरोध करें मुझे के भीतर से एक हीप डंप का अनुरोध करने का एक तरीका चाहिए।आवेदन

तर्क: जब मुझे एक विशिष्ट त्रुटि स्थिति का सामना करना पड़ता है, तो मैं ढेर को डंप करना चाहता हूं, ताकि मैं देख सकूं कि स्मृति में क्या हो रहा है।

लेकिन मैं इसे स्वचालित करना चाहता हूं (उदाहरण के लिए, जब मुझे पता चलता है कि कुछ विशिष्ट स्थिति आई है। या जब वॉचडॉग को अब अपने पिंग्स नहीं मिलते हैं। जब कुछ परीक्षण विफल हो जाते हैं)। इस प्रकार मुझे आवेदन के भीतर ही ढेर को डंप करने का एक तरीका चाहिए। मुझे एमएक्स बीन्स सामान के साथ यह प्रतीत नहीं होता है। हालांकि एमएक्स बीन्स मॉनिटर और "स्वामित्व सिंक्रनाइज़र" जानकारी, डेडलॉक और विवाद जानकारी के साथ बहुत अच्छे स्टैक निशान दे सकते हैं, मुझे एक ढेर डंप का अनुरोध करने का कोई तरीका नहीं मिल रहा है। क्या ऐसा कोई रास्ता है? या कुछ अप्रत्यक्ष माध्यमों से, उदाहरण के लिए ये JVisualVM चीजें कैसे करती हैं? और कोई आउटऑफमेमरी अपवादों पर कोर डंप करने के लिए जेवीएम को बता सकता है ..?

उत्तर

16

यदि यह dump heap on OutOfMemoryError के लिए पर्याप्त नहीं है, तो यह ठीक है अगर programmatically dumping heap from Java applications का हॉटस्पॉट-निर्भर तरीका है।

+0

बहुत बढ़िया, बस जो मैं खोज रहा था, धन्यवाद! मुझे यह आश्चर्यजनक लगता है कि मुझे अपने गुगल के दौरान उस ब्लॉग पोस्ट को नहीं मिला। सूर्य के तहत। प्रबंधन, जाहिर है बहुत मज़ा! – stolsvik

+0

एक और टिप्पणी, हालांकि (ओपी में पोस्ट किए गए विचारों पर वापस): "आउटऑफमेमरी एरर पर डंप ढेर" लिंक से, मैं पढ़ सकता हूं: "अंतर्निहित ढेर डम्पर का उपयोग ढेर के स्नैपशॉट लेने के लिए भी किया जा सकता है अन्य बार। यह jmap कमांड लाइन उपयोगिता या jconsole निगरानी और प्रबंधन कंसोल का उपयोग कर किया जाता है। " फिर वे उपकरण मालिकाना एमएक्सबीन का उपयोग करते हैं कि दूसरा लिंक संदर्भित करता है? मुझे यह अजीब लगता है कि मानक एमएक्स-बीन्स में यह डंप नहीं है (फ़ाइल नाम, लाइव) विधि। – stolsvik

+0

कष्टप्रद सॉर्ट करें, हां, लेकिन मुझे लगता है कि यह एक मानक कार्यक्षमता थी, हीप डंप प्रारूप को भी मानकीकृत किया जाना चाहिए। कम से कम, मुझे कल्पना है कि बहुत काम होगा, और यह संभवतः स्वतंत्रता विक्रेताओं को उनके वीएम कार्यान्वयन में सीमित कर सकता है। – gustafc

4

हॉटस्पॉट वीएम को स्मृति के बाहर होने पर एक हीप डंप उत्पन्न करने के लिए VM विकल्प -XX:+HeapDumpOnOutOfMemoryError का उपयोग करने के बारे में क्या है?

+0

+1: केवल "विशिष्ट त्रुटि स्थिति" जहां ओपी उचित रूप से जान सकता है कि स्मृति पर कुछ हो रहा है, एक आउटऑफमेमरी त्रुटि है; इस मामले में ढेर ढेर इस मामले में ढेर डंप वांछित देता है। –

+0

@Andrzej: यह एकमात्र "उचित" त्रुटि स्थिति क्यों होगी? यह समझने के कई तरीके हैं कि वीएम की स्मृति स्थिति क्या है, उदा। WeakReference, रनटाइम और एमएक्स बीन्स आदि के मेमोरी काउंटरों की जांच (System.gc() से पहले और बाद में) - बोटलोड। जेपीरोफाइल चट्टानों, लेकिन मैं एक प्रोग्रामेटिक, गैर-जेपीरोफिलर समाधान चाहता था। यहां एक और लड़का है जिसकी समस्या से मैं संबंधित हो सकता हूं: http://www.velocityreviews.com/forums/t275440-dump-complete-java-vm-state-as-core-dump-not-via-os-possible.html I शर्त है कि वह उस समाधान से प्यार करता जो मुझे दिया गया था! – stolsvik