2013-06-06 10 views
6

हम grails चला रहे हैं और हम परमजन अंतरिक्ष को साफ़ करने के लिए कई पूर्ण कचरा संग्रह की जरूरत है।परजेन कचरा संग्रह एकाधिक पूर्ण जीसी

2013-06-06T16:11:27.016+0000: 32582.145: [Full GC 32582.145: [CMS2013-06-06T16:11:45.404+0000:  32600.532: [CMS-concurrent-mark: 21.403/86.063 secs] [Times: user=48.44 sys=0.63, real=86.07 secs] 
(concurrent mode failure): 7585874K->7290466K(10145024K), 57.9230770 secs] 7866094K->7290466K(10451712K), [CMS Perm : 261766K->261702K(262144K)] icms_dc=30 , 57.9232150 secs] [Times: user=57.97 sys=0.00, real=57.93 secs] 
2013-06-06T16:12:25.183+0000: 32640.311: [GC [1 CMS-initial-mark: 7290466K(10145024K)] 7385976K(10451712K), 0.0880890 secs] [Times: user=0.09 sys=0.00, real=0.08 secs] 
2013-06-06T16:12:25.271+0000: 32640.400: [CMS-concurrent-mark-start] 
2013-06-06T16:12:25.427+0000: 32640.555: [GC 32640.556: [ParNew: 272640K->10006K(306688K), 0.0622620 secs] 7563106K->7300472K(10451712K) icms_dc=30 , 0.0624140 secs] [Times: user=0.24 sys=0.00, real=0.06 secs] 
2013-06-06T16:12:25.734+0000: 32640.863: [GC 32640.863: [ParNew: 282646K->13476K(306688K), 0.0648770 secs] 7573112K->7303942K(10451712K) icms_dc=30 , 0.0650170 secs] [Times: user=0.26 sys=0.00, real=0.07 secs] 
2013-06-06T16:12:26.013+0000: 32641.142: [GC 32641.142: [ParNew: 286116K->11277K(306688K), 0.0607460 secs] 7576582K->7301743K(10451712K) icms_dc=30 , 0.0608870 secs] [Times: user=0.25 sys=0.00, real=0.06 secs] 
2013-06-06T16:12:32.449+0000: 32647.577: [GC 32647.577: [ParNew: 283917K->17560K(306688K), 0.0672260 secs] 7574383K->7308026K(10451712K) icms_dc=30 , 0.0673710 secs] [Times: user=0.27 sys=0.00, real=0.07 secs] 
2013-06-06T16:12:33.107+0000: 32648.236: [GC 32648.236: [ParNew: 290200K->22523K(306688K), 0.0686820 secs] 7580666K->7312989K(10451712K) icms_dc=30 , 0.0688200 secs] [Times: user=0.28 sys=0.00, real=0.07 secs] 
2013-06-06T16:12:33.845+0000: 32648.974: [Full GC 32648.974: [CMS2013-06-06T16:12:52.516+0000: 32667.645: [CMS-concurrent-mark: 21.346/27.245 secs] [Times: user=27.55 sys=0.14, real=27.25 secs] 
(concurrent mode failure): 7290466K->7293289K(10145024K), 57.7092090 secs] 7523492K->7293289K(10451712K), [CMS Perm : 262143K->262143K(262144K)] icms_dc=30 , 57.7093560 secs] [Times: user=57.76 sys=0.00, real=57.71 secs] 
2013-06-06T16:13:31.557+0000: 32706.686: [Full GC 32706.686: [CMS: 7293289K->6960613K(10145024K), 37.1325250 secs] 7293289K->6960613K(10451712K), [CMS Perm : 262143K->91949K(262144K)] icms_dc=30 , 37.1326670 secs] [Times: user=37.19 sys=0.00, real=37.14 secs] 

पहले केवल 64K एकत्र करता है, दूसरा कुछ भी नहीं जमा करता है और फिर अंत में, तीसरे 170194K

JAVA_OPTIONS: 
-XX:+CMSClassUnloadingEnabled 
-XX:+CMSPermGenSweepingEnabled 
-XX:+UseConcMarkSweepGC 
-XX:MaxPermSize=256m 
-XX:+PrintGCDetails 
-XX:+PrintGCTimeStamps 
-XX:+PrintGCDateStamps 
-verbose:gc,sizes 
-XX:+UseConcMarkSweepGC 
-XX:CMSInitiatingOccupancyFraction=80 
-XX:+DisableExplicitGC 
-XX:+CMSIncrementalMode 
-XX:+UseParNewGC 
-Xms10g -Xmx10g 

इसके अलावा एकत्र करने में सक्षम है, है वहाँ वैसे भी एक वृद्धिशील करने के लिए कचरा कलेक्टर मिलता बताने के लिए है परमजन अंतरिक्ष की झाड़ू? हम केवल पूर्ण संग्रह के दौरान परमजन को कम करते देखते हैं। -XX:+PrintClassHistogramBeforeFullGC -XX:+PrintClassHistogramAfterFullGC:

+0

क्या हॉटस्पॉट संस्करण आप चल रहे हैं? –

+1

हम इवल करने के लिए grails में एक सुविधा का उपयोग कर रहे थे।मुझे() एक अभिव्यक्ति पर जिसने एक वर्ग संकलित किया और हमारे परमजन अंतरिक्ष को मार डाला। हमने इसे बंद करने और हर बार इवल करने के बजाय उन्हें पुन: उपयोग करके तय किया। – tcollins

उत्तर

0

एक तरीका क्या है कि पिछले FullGC संग्रह में एकत्र की जा रही है की पहचान करने के प्रिंट वर्ग histograms से पहले/पूर्ण जीसी के बाद किया जा सके।

इस तरह आप सभी संग्रहों से हिस्टोग्राम की तुलना कर सकते हैं और पहचान सकते हैं कि आखिरी में कौन से वर्ग एकत्र किए जाते हैं।

पर्मगेन पर विचार करने के आपके दूसरे प्रश्न के लिए, सामान्य सलाह आपके आवेदन/वर्कलोड के लिए पर्मजेन के पर्याप्त आकार की पहचान करना और उसके साथ चिपकना है। आपको जांच करने की आवश्यकता है कि PermGen में इतनी सारी वस्तुओं को क्यों रखा जा रहा है।

1

मुझे समवर्ती मार्क स्वीप और इसके बढ़ते मोड एल्गोरिदम के बारे में स्पष्टीकरण दें। पृष्ठभूमि जीसी चल रहा है, जबकि एकल कोर सर्वर पर सीपीयू भुखमरी से बचने के लिए सीएमएस वृद्धिशील मोड पेश किया गया था। वृद्धिशील सीएमएस का उपयोग निराश है।

वृद्धिशील मोड में स्मृति वृद्धि मुक्त नहीं होती है, यह मार्क-स्वीप एल्गोरिदम के मार्क चरण के दौरान बस लंबी नींद लेती है।

-XX:+CMSPermGenSweepingEnabled बहिष्कृत है और पर्याय -XX:+CMSClassUnloadingEnabled

वृद्धिशील मोड कुछ हद तक hiders को मृत वस्तु का पता लगाने और एक समस्या हो सकती है।

इसके अतिरिक्त, यदि कक्षाओं में से कोई भी (अनलोड किए जाने के लिए) फिनिलज़र है तो यह 2 संग्रहों को भी समझा सकता है (जेवीएम व्यक्तिगत कक्षाएं अनलोड नहीं कर सकता है, पूरे क्लासलोडर को अनलोड किया गया है, इसलिए इसकी कोई भी कक्षा संग्रह को रोक सकती है)।

मैं आपको उचित आकार के ढेर और परम जीन के लिए सलाह दूंगा, और यदि आप उस स्तर के ढेर उपयोग को रखना चाहते हैं तो सीएमएस को अधिक आक्रामक होने के लिए कॉन्फ़िगर करें। my blog में आप सीएमएस को ट्यून करने के लिए कुछ सलाह पा सकते हैं।

यदि आप चलाते हैं, तो समय चल रहा है, जीसी ट्यूनिंग क्लास लोडर सक्रिय रूप से उत्पादन और त्याग कर रहा है, पर्याप्त नहीं हो सकता है।

मुझे स्वचालित परीक्षणों के साथ समान मुद्दों का सामना करना पड़ रहा था (प्रत्येक परीक्षा अलगाव के लिए समर्पित कक्षा लोडर में समान कक्षाएं लोड कर रही थी)। टेस्ट जीन में ओओएमई फेंकने, टेस्ट आम तौर पर अस्थिर थे। समाधान कचरा डेटा (here is snippet of code) के साथ प्रदूषित करके परम जीन को साफ करने के लिए जेवीएम को मजबूर करना था। हालांकि यह पूर्ण जीसी पैदा कर रहा था - शायद ऐसा कुछ नहीं जिसे आप देखना चाहते हैं।

बीटीडब्ल्यू -XX:CMSClassUnloadingMaxInterval=N ध्वज भी है जो जेवीएम को केवल हर एनएच संग्रह पर पर्म जेन एकत्र करने देता है। लेकिन यह आपका मामला नहीं है, क्योंकि परम जीन भरा हुआ है।

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