2008-10-11 15 views
11

एक heapdump या एक चल वी एम को देखते हुए में है मैं कैसे पता चलता है कि क्या स्थायी पीढ़ी की सामग्री है? मैं 'jmap -permstat' के बारे में जानता हूं लेकिन यह विंडोज़ पर उपलब्ध नहीं है।मैं कैसे पता चलता है कि क्या, स्थायी पीढ़ी

+0

आपके प्रश्न का उत्तर नहीं दे रहा है, लेकिन शायद आपको समस्या का उत्तर दे रहा है - सूर्य जेवीएम में एक परमिट है, लेकिन ऐसे अन्य जेवीएम हैं जो इससे ग्रस्त नहीं हैं। – Tnilsson

+3

यहां समस्या यह है कि परमिट (या अन्य जेवीएम में समकक्ष) JVMTI इंटरफ़ेस द्वारा प्रकट नहीं किया गया है, और इसलिए टूल्स का आत्मनिरीक्षण करने का कोई साधन नहीं है। टूल विक्रेताओं के साथ यह एक बड़ा मुद्दा है। – skaffman

+1

कृपया जावा संस्करण बताएं। पहले सूरज जेवीएम में, जीसी कक्षाओं को इकट्ठा करने के बारे में परिचित था। अगर आपको हेपडम्प मिलता है तो आप अनुमान लगा सकते हैं कि आंतरिक तार आपकी समस्या है या नहीं। – Ron

उत्तर

-1

तुम क्या है, जहां पता लगाने के लिए (JDK 1.6 7 के साथ) JConsole या jvisualvm.exe उपयोग कर सकते हैं। यदि आप जानना चाहते हैं कि आपकी सभी वस्तुएं एक दूसरे से और वस्तुओं के पेड़ से कैसे संबंधित हैं, तो आप एक्लिप्स मेमोरी विश्लेषक - http://www.eclipse.org/mat/ को आजमा सकते हैं।

सारांश में, आप मिल जाएगा आप "http://www.eclipse.org/mat/" से चाहते हैं।

शुभकामनाएं,

+0

मैं विशेष रूप से देख रहा हूं कि स्थायी पीढ़ी में कौन सी वस्तुएं हैं। ये उपकरण उस प्रश्न का उत्तर नहीं देंगे। – Tom

+0

हाय टॉम, MAT आपके प्रश्न का उत्तर दे सकता है लेकिन आपको एसएपी जेवीएम का उपयोग करना होगा, दुर्भाग्यवश इस समय थोड़ा मुश्किल हो रहा है। आपको https://www.sdn.sap.com/irj/sdn/nw-ce – kohlerm

1

स्थायी पीढ़ी में कक्षा वस्तु शामिल है। तो आपको कक्षाओं के लिए हीप डंप या ऑब्जेक्ट सूची के अन्य रूप की जांच करनी चाहिए। आप आमतौर पर यह दो कारण के कारण होता है स्थायी पीढ़ी के आकार के साथ समस्या है, तो:

  • अपने कार्यक्रम या एक पुस्तकालय आप उपयोग कक्षाएं गतिशील बनाता है और स्थायी पीढ़ी के डिफ़ॉल्ट आकार बहुत छोटा है - सरल increate आकार यह एक प्रोग्रामिंग त्रुटि है तो आप इसे ठीक करना चाहिए (या खोज - MaxPermSize = 256M
  • अपने कार्यक्रम या एक पुस्तकालय आप का उपयोग नए वर्गों गतिशील हर बार यह कहा जाता है बनाता है, इसलिए स्थायी पीढ़ी बढ़ जाती है बिना रुके का आकार: -XX साथ एक फिक्स/एक बग रिपोर्ट बनाएं)

यह देखने के लिए कि आपका कैसा कैसा है ई एक बड़ी अवधि में स्थायी पीढ़ी के आकार की जांच करें।

और स्थायी पीढ़ी के बारे में एक अच्छा सिंहावलोकन:

http://blogs.oracle.com/jonthecollector/entry/presenting_the_permanent_generation

+0

से एनडब्ल्यू सीई प्राप्त करने की आवश्यकता होगी यह उत्तर अधूरा है: वर्तमान में हमारे पास एक ऐप है जो परमजन मेमोरी लीक हो रहा है और लोड की गई कक्षाओं की संख्या बिल्कुल स्थिर है। JConsole का उपयोग कर दोनों तथ्यों को देखा जा सकता है। हम मूल पोस्टर के समान समस्या से ग्रस्त हैं जिसमें हमारे पास परमजन का विस्तार से विश्लेषण करने का कोई तरीका नहीं है। –

0

के बारे में thr permsize of Eclipse

संक्षेप में मेमोरी विश्लेषक छदाम कर सकते हैं अपने ब्लॉग पोस्ट देखें, लेकिन आप एसएपी JVM की जरूरत है।

0

आप हल करने के लिए एक विशिष्ट समस्या है? String.intern() का उपयोग permgen समस्याओं के लिए सामान्य कारणों में से एक है। इसके अतिरिक्त कई कक्षाओं के साथ परियोजनाओं में भी permgen समस्याएं हैं। कक्षा परिभाषा और तार प्रशिक्षु:

मैं permgen में प्राप्त करने के लिए कैसे जानते हैं और देखते हैं कि क्या यह है नहीं है ...

0

स्थायी पीढ़ी वास्तव में केवल बातें के दो प्रकार होते हैं। लेटर बहुत ही कम आपको समस्याएं देता है, लेकिन इसे अक्सर समस्याओं के लिए दोषी ठहराया जाता है। कोड जनरेशन और आंशिक हॉट रीलोडिंग (संदर्भों को लटकाने) के कारण अक्सर समस्याएं होती हैं।

विपरीत नाम से पता चलता, permgen अंततः GC'ed भी बस नियमित जीसी चक्र का हिस्सा नहीं मिल रहा है,। इसलिए अनियंत्रित प्रशिक्षित स्ट्रिंग्स और अप्रयुक्त कक्षाएं साफ हो जाती हैं। लेकिन परमिट भी गतिशील रूप से नहीं बढ़ता है जिसका अर्थ है कि कभी-कभी JVM प्रारंभ के लिए अपनी सेटिंग्स का आकार बदलने के लिए आवश्यक होता है।

0

मैं एक ही बात में लेकिन एक एम्बेडेड मंच की स्मृति की कमी के कारण देख रहा हूँ। jmap के लिए कोड में

देखो, permstat उपकरण तभी उपलब्ध होता है sun.jvm.hotspot.tools.HeapSummary वर्ग उपलब्ध है। यह वर्ग सेवाशीलता एजेंट का हिस्सा है। ओपनजेडीके दस्तावेज के अनुसार (http://openjdk.java.net/groups/serviceability/svcjdk।एचटीएमएल # बीएसए):

सेवाशीलता एजेंट घटक हॉटस्पॉट भंडार के मानक निर्माण के हिस्से के रूप में बनाए जाते हैं। ये घटक हैं:

-libsaproc.so: यह एसए का मूल कोड घटक है।

-sa-jdi.jar: इसमें एसए के जावा क्लासेस शामिल हैं। इसमें जेडीआई का कार्यान्वयन शामिल है जो जेडीआई क्लाइंट को कोर फाइलों पर केवल पढ़ने के लिए डीबगिंग करने की अनुमति देता है और प्रक्रियाओं को लटका देता है।

एसए, jinfo, jmap द्वारा किया जाता है jstack

नोट: सेवा-एजेंट और प्रौद्योगिकियों कि इसका इस्तेमाल वर्तमान में JDK में शामिल नहीं हैं विंडोज प्लेटफॉर्म पर जारी करता है।

ओरेकल जेडीके के मामले में भी दिखता है। मैं अधिक जानकारी प्राप्त करने के लिए jmap टूल को संशोधित करना चाहता हूं।

1

यह आलेख Memory Monitoring with Java SE 5 वर्णन करता है कि प्रोग्रामिंग रूप से ढेर उपयोग, मेमोरी पूल (परमजन स्पेस सहित) पर जानकारी कैसे प्राप्त करें। इसका बहुत सरल:

MemoryUsage usage = ManagementFactory.getMemoryMXBean().getNonHeapMemoryUsage(); 
    long nonHeapFree = usage.getMax() - usage.getUsed(); 
    long nonHeapTotal = usage.getMax(); 

पर OSX (सूर्य वी एम) "गैर ढेर स्मृति उपयोग" मेरे परीक्षण में से मेल खाता है मानों permgen पूल निकट के लिए लौट आए और शायद कुछ VMs पर उपयोगी है कि permgen नहीं करेंगे।

0

एक तकनीक है कि मुझे मदद की -verbose:classcommand-line option to java का इस्तेमाल किया गया है, और आप लॉग ऑन कर देंगे उत्पादन तुमसे कह के रूप में कक्षाएं लोड किए गए हैं/उतार। चूंकि वर्गों को परमिट में लोड किया जाता है, यह कुछ परिस्थितियों में मदद कर सकता है।

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