2009-01-23 8 views
19

में "PermGen" आवर्ती "मैं अपने टॉमकैट 6 सर्वर पर" PermGen "त्रुटि प्राप्त करता रहता हूं।टॉमकैट 6

मुझे पता है कि एप्लिकेशन किस समस्या का कारण बन रहा है, लेकिन मुझे यकीन नहीं है कि यह ऐसा क्यों कर रहा है। एप्लिकेशन MySQL 5 का उपयोग कर रहा है और जेडीके 6 पर चल रहा है।

क्या विशिष्ट एप्लिकेशन के साथ अंतर्निहित मुद्दे का निदान या विश्लेषण करने के लिए कोई उपकरण/सुझाव हैं?

धन्यवाद

+0

इस समस्या को एक [यहाँ वर्णित] (http://stackoverflow.com/questions/1124131/what-can-be-done से किसी भी अलग है -साथ-permgen-बाहर के अंतरिक्ष अपवाद-इन-बिल्ला वसंत-हाइबरनेट)? –

+0

मैं [इस लेख] पढ़ने की सलाह देते हैं (http: // plumbr।eu/blog/what-is-a-permgen-leak) (मेरे द्वारा लिखित), बेहतर ढंग से समझने के लिए कि ये त्रुटियां क्यों हो सकती हैं। और इसमें उन्हें हल करने के लिए कुछ सुझाव भी शामिल हैं। – Nikem

उत्तर

25

PermGen दुकान वर्ग परिभाषा और प्रशिक्षु स्ट्रिंग पूल करने के लिए प्रयोग किया जाता है। आपका कोड इसे भर सकता है (यदि यह अनिवार्य रूप से इंटर्न को कॉल करता है), लेकिन अधिक संभावना है कि डिफ़ॉल्ट आपके एप्लिकेशन के लिए अंडरसाइज़ किया गया हो।

ऐसा इसलिए है क्योंकि हर बार जब आप एक युद्ध तैनात करते हैं तो टॉमकैट नई कक्षाएं लोड करेगा - या, यदि आप एक विकास वातावरण में काम कर रहे हैं, हर बार जब आप एक जेएसपी संपादित करते हैं। अंततः उन्हें साफ किया जाना चाहिए, लेकिन एक सक्रिय विकास वातावरण में आप अवधि हो सकते हैं जहां पुराने और नए दोनों उदाहरण लोड होते हैं। या, यदि आप एक उत्पादन वातावरण में हैं और एक बड़ा वेब ऐप है, तो आपको बस अधिक जगह की आवश्यकता हो सकती है।

permgen आकार निर्धारित करने के लिए, -XX:MaxPermSize=SIZE

निम्न लिंक का उपयोग सहायक हो सकता है: tuning GC (यह 1.5 संस्करण है), GC FAQ (1.4.2 संस्करण), Hotspot VM options (मेरा मानना ​​है कि यह 1.6 है)

+0

प्रतिक्रिया के लिए धन्यवाद, मैं आपके सभी सुझावों को देखूंगा। –

+0

चूंकि यह आज छुआ है (धन्यवाद, जो भी ऊपर उठाया गया है), यहां ओओएम (मेरे द्वारा लिखित) का निदान करने का एक और लिंक है: http://www.kdgregory.com/index.php?page=java.outOfMemory – kdgregory

2

मुझे लगता है कि आपके आवेदन में आपके पास कई जेएसपी हो सकते हैं। टॉमकैट में एक ज्ञात मुद्दा है जहां कई जेएसपी के साथ एक तैनात आवेदन को पुनरारंभ करने से पर्मजेन के मुद्दों का कारण बनता है क्योंकि टोमकैट फिर से इन सभी कक्षाओं को फिर से लोड करता है और फिर से लोड करता है। पिछले पोस्ट में उल्लिखित आकार को बढ़ाने में मदद करनी चाहिए।

13

निम्नलिखित JVM स्विच का प्रयास करें:

-XX:+UseConcMarkSweepGC 
-XX:+CMSPermGenSweepingEnabled 
-XX:+CMSClassUnloadingEnabled 

-XX:MaxPermSize साथ permgen अंतरिक्ष बढ़ा बस समस्या विलंब।

कृपया इस टिप्पणी को देख: How to deal with “java.lang.OutOfMemoryError: PermGen space” error

कि परोक्ष रूप से मुझे इन दो पदों की ओर इशारा किया: problem, solution

+2

यह समस्या में देरी यदि आप आकस्मिक क्लासलोडर लिंक बनाए रखते हैं। और, यह सुनिश्चित करने के लिए, ऐसे कई मामले हैं जहां यह हो सकता है, और यह तब तक असंभव हो सकता है जब तक कि आप अपने पुस्तकालयों को अंदर और बाहर नहीं जानते (java.beans.Introspector, उदाहरण के लिए, कक्षा का कैश बनाए रखता है डेटा)। – kdgregory

+2

हालांकि, अक्सर समस्या यह है कि वेब-ऐप डिफ़ॉल्ट का उपयोग करने के लिए बहुत बड़ा है। विशेष रूप से एक विकास वातावरण में, जहां आपके पास 64 एमबी परमिट है, और लगातार पुन: नियोजन हो सकता है। सभी मौजूदा संदर्भों के दायरे से बाहर निकलने में समय लगता है (उदाहरण के लिए, आखिरी सर्वलेट पर लटका हुआ पूल वाला धागा)। – kdgregory

1

मैं permgen त्रुटियों के बहुत सारे जब बिल्ला जब हाइबरनेट का उपयोग कर एक कोड बदलने के बाद पुनः लोड और है देखा है वसंत, मुझे लगता है कि यह लॉगर/ehcache उदाहरणों के कारण ठीक से बंद नहीं किया जा रहा है।

2

मैं मानता हूं कि -20 के साथ परमजन स्पेस बढ़ाना: MaxPermSize बस समस्या को देरी करता है। मैंने परमिट बढ़ाने की कोशिश की और इसके बाद मैंने अपने सर्वर पर अधिक संख्या में अनुरोध भेजे जाने के बाद भी वही त्रुटि प्राप्त करना शुरू कर दिया। अतिरिक्त झंडे जैसे-XX: + CMSClassUnloadingEnabled का सुझाव दिया गया है भले ही यह प्रदर्शन को कम करेगा।

3

इस कोशिश: में लिनक्स मशीनें

export JAVA_OPTS="-XX:PermSize=128m"