2011-03-28 12 views
8

जावा 6 (1.6.0_23) जीसी ट्यूनिंग के लिए, मैंजावा जीसी में पुराने क्षेत्र को अनुकूली रूप से आकार कैसे बदल सकता हूं?

-XX:+PrintTenuringDistribution 
-XX:+UseAdaptiveSizePolicy 
-XX:+UseAdaptiveGCBoundary 

के साथ -XX:+UseParallelOldGC का उपयोग मेरा लक्ष्य जीसी पुराने और नए क्षेत्रों के बीच एक इष्टतम अनुपात की गणना करने देने के लिए है। हालांकि, visualgc (jvmstat 3.0) दिखाता है कि ईडन और बचे हुए के बीच अनुपात मेरे वर्कलोड के अनुसार संशोधित किया गया है, पुराना क्षेत्र newRatio (मेरे मामले में 2) द्वारा तय किए गए प्रारंभिक आकार में (सख्त) रहता है।

मेरी सेटिंग्स या अपेक्षाओं में क्या गलत है?

मेरी स्क्रीन पर, 1 9 संग्रह के बाद विज़ुअलजीसी पुराने जनरल को 500 मीटर के तहत लगातार दिखाता है जबकि पुराने जनरल के आरक्षित और प्रतिबद्ध आकार 624 मीटर के बराबर होते हैं। मैंने 30m पर न्यूसाइज सेट किया है और MaxNewSize 300m पर सेट किया है, लेकिन यह कुछ भी नहीं बदलेगा: न्यूरेटियो असंगत लगता है ... प्रिंटएडैप्टिव साइज पॉलिसी केवल उत्तरजीवी के बारे में बोलता है। + UseAdaptiveGCBoundary बिना किसी परिवर्तन के:

मुद्दा यह है कि "आरक्षित अंतरिक्ष" visualgc के मेनू ओल्ड जनरल अंतरिक्ष के लिए कुछ भी दिखाई नहीं देता ... मैं -XX का प्रयोग करने में भी tryed है है।

यहाँ कुछ लॉग हैं -XX:+PrintTenuringDistribution -XX:+PrintGCDetails

एक पूर्ण जीसी, और ढेर के अंतिम प्रिंट ... ऐसा लगता है कि पर्याप्त वितरण विकृत भी है है ...

Desired survivor size 119275520 bytes, new threshold 1 (max 15) 
[PSYoungGen: 182096K->66576K(233024K)] 681978K->631994K(932096K), 0.2582390 secs] [Times: user=0.29 sys=0.00, real=0.26 secs] 
116.431: [GC 
Desired survivor size 119275520 bytes, new threshold 1 (max 15) 
[PSYoungGen: 183120K->39952K(233024K)] 748538K->670910K(932096K), 0.1578620 secs] [Times: user=0.29 sys=0.00, real=0.16 secs] 
116.589: [Full GC [PSYoungGen: 39952K->0K(233024K)] [ParOldGen: 630958K->310429K(699072K)] 670910K->310429K(932096K) [PSPermGen: 21973K->21973K(30592K)], 1.3326720 secs] [Times: user=1.79 sys=0.01, real=1.33 secs] 
118.050: [GC 
Desired survivor size 119275520 bytes, new threshold 1 (max 15) 
[PSYoungGen: 116544K->18448K(233024K)] 426973K->328877K(932096K), 0.0745320 secs] [Times: user=0.14 sys=0.00, real=0.08 secs] 
118.234: [GC 
Desired survivor size 119275520 bytes, new threshold 1 (max 15) 
[PSYoungGen: 134992K->24592K(233024K)] 445421K->351409K(932096K), 0.1290960 secs] [Times: user=0.14 sys=0.00, real=0.13 secs] 
118.526: [GC 
Desired survivor size 114884608 bytes, new threshold 1 (max 15) 
[PSYoungGen: 141136K->36880K(237312K)] 467953K->380085K(936384K), 0.1187320 secs] [Times: user=0.21 sys=0.00, real=0.12 secs] 
118.759: [GC 
Desired survivor size 108593152 bytes, new threshold 1 (max 15) 
[PSYoungGen: 142446K->40976K(233024K)] 485652K->416957K(932096K), 0.1153230 secs] [Times: user=0.23 sys=0.00, real=0.12 secs] 
Heap 
PSYoungGen total 233024K, used 97957K (0xb3a40000, 0x9e4f0000, 0x9e4f0000] 
eden space 120832K, 47% used [0x9e4f0000,0xa1c95668,0xa5af0000) 
from space 112192K, 36% used [0xa5af0000,0xa82f4020,0xac880000) 
to space 106048K, 0% used [0xad2b0000,0xad2b0000,0xb3a40000) 
ParOldGen total 699072K, used 375981K [0x73a40000, 0x9e4f0000, 0x9e4f0000) 
object space 699072K, 53% used [0x73a40000,0x8a96b730,0x9e4f0000) 
PSPermGen total 30592K, used 21981K [0x6fa40000, 0x71820000, 0x73a40000) 
object space 30592K, 71% used [0x6fa40000,0x70fb7668,0x71820000) 
+0

मेरी समझ यह है कि कार्यकाल का आकार बढ़ते उपयोग के साथ बढ़ता है। एक बार जब आप एक स्थिर मेमोरी उपयोग (संभवतः बहुत तेज़ी से) पहुंच गए हैं तो मैं इसे बहुत अधिक बढ़ने की उम्मीद नहीं करूंगा –

+0

क्या इस अवधि के दौरान यह कोई पुराना संग्रह है? मुझे लगता है कि यह उनमें से कुछ करने के बाद केवल पुराना आकार बदलता है। आप 'PrintAdaptiveSizePolicy' के साथ-साथ verbosegc का उपयोग करना चाह सकते हैं ताकि आप देख सकें कि यह विस्तार से क्या कर रहा है। – Matt

+0

आपने यह नहीं बताया कि आपका प्रोग्राम क्या कर रहा है, लेकिन यदि यह व्यक्तिगत अनुभव से सर्वर है, तो मैं आपको सलाह दूंगा कि आप इसे (टेस्ट) लोड के तहत रखें और जीसी मानों को ट्यून करें ताकि आप जो प्रदर्शन चाहते हैं उसे प्राप्त कर सकें। गतिशील कुछ भी भूल जाओ - कुछ ऐसा करने के लिए बेहतर है जो कुछ हद तक अपर्याप्त है लेकिन पूर्ण लोड के तहत ज्ञात है। –

उत्तर

3

मैं जावा जीसी में पुराने क्षेत्र को अनुकूली रूप से आकार कैसे बदल सकता हूं?

मुझे नहीं लगता कि यह संभव है। जीसी के पास "ट्यूनिंग knobs" का एक सीमित सेट है, और मैं ऐसा नहीं देख सकता जो आपके लिए ऐसा करेगा। मेरी भावना यह है कि आप समस्या पर "सोचने" पर हैं।

संदर्भ:

यदि यह जवाब काफी अच्छा नहीं है, अपने विकल्पों को नहीं बल्कि सीमित हैं:

  • यदि आप उपयुक्त चैनलों के माध्यम से गए और कुछ पैसे निकालने के लिए तैयार थे, तो शायद आपको ओरेकल ट्यूनिंग विशेषज्ञ से कुछ मदद मिल सकती है ।

  • यदि आपके पास समय और धैर्य था, तो आप ओपनजेडीके कोड-बेस में जीसी स्रोत कोड के आसपास अपना सिर प्राप्त करने का प्रयास कर सकते हैं।

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