आप दो अलग-अलग जावा डंप को भ्रमित कर रहे हैं। kill -3
थ्रेड डंप उत्पन्न करता है, न कि ढेर डंप।
थ्रेड डंप = JVM आउटपुट में प्रत्येक थ्रेड के लिए स्टैक को पाठ के रूप में स्टडआउट करने के लिए।
एक द्विआधारी फ़ाइल के लिए जेवीएम प्रक्रिया आउटपुट के लिए ढेर डंप = मेमोरी सामग्री।
विंडोज पर थ्रेड डंप लेने के लिए, CTRL+ BREAKयदि आपकी जेवीएम अग्रभूमि प्रक्रिया है तो सबसे सरल तरीका है। यदि आपके पास विंडोज पर साइक्सविन या मोब्क्टरम जैसे यूनिक्स जैसा शेल है, तो kill -3 {pid}
आप यूनिक्स में जैसे चाहें उपयोग कर सकते हैं।
यूनिक्स में एक थ्रेड डंप लेने के लिए, CTRL+ Cयदि आपकी जेवीएम अग्रभूमि प्रक्रिया है या kill -3 {pid}
जब तक आप जेवीएम के लिए सही पीआईडी प्राप्त नहीं करेंगे, तब तक काम करेंगे।
या तो मंच के साथ, जावा कई उपयोगिताओं के साथ आता है जो मदद कर सकते हैं। थ्रेड डंप के लिए, jstack {pid}
आपका सबसे अच्छा दांव है। http://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jstack.html
बस डंप सवाल को खत्म करने के लिए: हीप डंप का आमतौर पर उपयोग नहीं किया जाता है क्योंकि उन्हें व्याख्या करना मुश्किल है। लेकिन, उनमें बहुत सारी उपयोगी जानकारी होती है यदि आप जानते हैं कि उन्हें कहाँ / कैसे देखना है। मेमोरी लीक का पता लगाने के लिए सबसे आम उपयोग है। यह -D
जावा कमांड-लाइन पर सेट करने के लिए एक अच्छा अभ्यास है ताकि ढेर डंप स्वचालित रूप से एक आउटऑफमेरीऑयर पर उत्पन्न होता है, -XX:+HeapDumpOnOutOfMemoryError
लेकिन, आप मैन्युअल रूप से एक ढेर डंप को ट्रिगर कर सकते हैं, भी। सबसे आम तरीका है जावा उपयोगिता का उपयोग करना jmap
।
नोट: यह उपयोगिता सभी प्लेटफार्मों पर उपलब्ध नहीं है। JDK 1.6 के रूप में, jmap
विंडोज पर उपलब्ध है।
एक उदाहरण कमांड-लाइन कुछ इस तरह दिखाई देगी
jmap -dump:file=myheap.bin {pid of the JVM}
आउटपुट "myheap.bin" मानव पठनीय नहीं है (हम में से अधिकांश के लिए), और आपको इसका विश्लेषण करने के लिए एक उपकरण की आवश्यकता होगी। मेरी प्राथमिकता MAT है। http://www.eclipse.org/mat/