2011-04-12 11 views
6

कारणों मैं लगातार मेरी पर्यावरण के लिए PermGen में OOM का पता लगाने:PermGen आउट

  1. जावा 6
  2. jboss-4.2.3
  3. नहीं एक बड़ा वेब आवेदन

मैं String.intern() समस्या के बारे में जानें - लेकिन मेरे पास पर्याप्त मूल्यवान उपयोग नहीं है। मैक्सप्रमजेन आकार में वृद्धि ने बल नहीं लिया (128 एमबी से 256 एमबी तक)।

पर्मजेन के लिए ओओएम का क्या कारण हो सकता है? ऐसी स्थिति (रणनीति, उपकरण और आदि) में जांच का कौन सा परिदृश्य सबसे अच्छा है?

किसी भी मदद

उत्तर

13

See this note

  • में नहीं आम/lib में डाल JDBC ड्राइवर (बिल्ला प्रलेखन का कहना है के रूप में) और वेब-INF/lib
  • न रखें कॉमन्स-प्रवेश के लिए धन्यवाद वेब-आईएनएफ/lib में चूंकि टोमकैट पहले से ही इसे बूटस्ट्रैप्स करता है

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

-XX:+CMSPermGenSweepingEnabled 

इस सेटिंग में एक कचरा संग्रह चलाने में पर्मजेन शामिल है। डिफ़ॉल्ट रूप से, पर्मजेन स्पेस कचरा संग्रह में कभी शामिल नहीं होता है (और इस प्रकार सीमा के बिना बढ़ता है)।

-XX:+CMSClassUnloadingEnabled 

यह सेटिंग कक्षा वस्तुओं पर कार्रवाई करने के लिए PermGen कचरा संग्रहण स्वीप बताती है। डिफ़ॉल्ट रूप से, क्लास ऑब्जेक्ट्स को छूट मिलती है, भले ही पर्मगेन स्पेस को कचरा संग्रह के दौरान देखा जा रहा हो।

+3

CMSPermGenSweepingEnabled JDK6 के रूप में हटा दिया गया है, इसके अलावा + CMSPermGenSweepingEnabled उपयोगी केवल जब + UseConcMarkSweepGC अन्यथा यह है बेकार –

+0

@ PMDUBIK-INGENIERIE मेरे हीरो सक्षम किया गया है 'पर आपकी टिप्पणी खोज के 2 घंटे के बाद, + UseConcMarkSweepGC' permgen बनाता है स्वीप वास्तव में काम करते हैं। आप लोगों को 'CMSPermGenSweepingEnabled' का उपयोग करने के लिए कहने वाले बहुत से उत्तरों के साथ बात करेंगे, किसी का उल्लेख होगा कि आपको वास्तविक रूप से एक और झंडा जोड़ना होगा ... टॉमकैट वास्तव में परगजन स्पेस को चूसने के साथ पुनः नियोजित कर सकता है। –

8

classloader leak होने पर एप्लिकेशन को पुन: नियोजित करते समय आपको आमतौर पर यह त्रुटि मिलती है, क्योंकि इसका मतलब है कि पुराने संस्करणों के आसपास रहते हुए आपके सभी वर्ग फिर से लोड हो जाते हैं। - आसान है, लेकिन कष्टप्रद

  • जांच और एक प्रोफाइलर का उपयोग कर रिसाव को ठीक

    • पुनः प्रारंभ बजाय आवेदन redeploying के अनुप्रयोग सर्वर:

      दो समाधान कर रहे हैं। दुर्भाग्यवश, क्लासलोडर लीक को इंगित करना बहुत मुश्किल हो सकता है।

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