कल मैंने अपने पहले Grails (2.3.6) ऐप को एक dev सर्वर पर तैनात किया और इसकी निगरानी करना शुरू कर दिया। मुझे बस एक स्वचालित मॉनीटर मिला है जिसमें कहा गया है कि सीपीयू को इस मशीन पर पिन किया गया था, और इसलिए मैंने इसमें एसएसएचड किया। मैं top
चला गया और पाया कि यह मेरा जावा ऐप का पीआईडी था जो सर्वर को पिन कर रहा था। मैंने यह भी देखा कि स्मृति 40% थी। कुछ सेकंड के बाद, सीपीयू पिनिंग बंद कर दिया, एक सामान्य स्तर पर चला गया, और स्मृति ~ 20% रेंज में वापस चला गया। क्लासिक प्रमुख जीसी।ग्रोवी/ग्रेल्स क्लासलोडर रिसाव को समझना
जब यह एकत्र हो रहा था, मैंने एक ढेर डंप किया था। जीसी के बाद, मैंने JVisualVM में डंप खोला और देखा कि अधिकांश मेमोरी org.codehaus.groovy.runtime.metaclass.MetaMethodIndex.Entry
कक्षा के लिए आवंटित की जा रही थी। कुल मिलाकर लगभग 250,000 उदाहरण थे, लगभग 25 एमबी मेमोरी खा रहे थे।
मैंने इस कक्षा को गुगल किया और ultra helpful Javadocs पर एक नज़र डाली। तो मुझे अभी भी पता नहीं है कि यह वर्ग क्या करता है।
लेकिन गुगलिंग ने इस वर्ग से जुड़े एक दर्जन या उससे संबंधित लेख (उनमें से कुछ SO प्रश्न) और Grails/Groovy ऐप्स के साथ एक पर्मजेन/क्लासलोडर रिसाव भी लाया। और ऐसा लगता है कि मेरे ऐप ने वास्तव में जीसी के साथ इन 250 के उदाहरण को साफ कर लिया है, फिर भी यह परेशान है कि इसके कई उदाहरण थे, और जीसी ने सीपीयू को 5 मिनट से अधिक समय तक पिन किया।
मेरे सवालों का:
- इस वर्ग क्या है और क्या ग्रूवी इसके साथ क्या कर रही है?
- क्या कोई मुझे this answer समझा सकता है?
-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled
इस विशेष समस्या का उपयोग क्यों करेगा? - यह कक्षा विशेष रूप से PermGen के लिए परेशानी क्यों है?