से पहले अग्रिम चेतावनी प्राप्त करना एक नरम वास्तविक समय प्रणाली के संदर्भ के लिए जो 200ms से अधिक के लिए रुकना नहीं चाहिए, हम पूर्ण जीसी आने से पहले अग्रिम चेतावनी पाने का एक तरीका ढूंढ रहे हैं। हमें एहसास है कि हम इससे बचने में सक्षम नहीं हो सकते हैं, लेकिन हम सिस्टम स्टालों से पहले किसी अन्य नोड में विफल होना चाहते हैं।पूर्ण जीसी
हम एक ऐसी योजना के साथ आने में सक्षम हुए हैं जो हमें पूर्ण जीसी से पहले अग्रिम चेतावनी प्रदान करेगा जो सिस्टम को कई सेकंड (जिसे हमें टालना चाहिए) के लिए रोक सकता है।
हम सीएमएस मुक्त सूची आंकड़ों पर निर्भर होने के साथ क्या करने में सक्षम हुए हैं: -XX:PrintFLSStatistics=1
। यह युवा जीसी समेत प्रत्येक जीसी चक्र के बाद जीसी लॉग में मुफ्त सूची आंकड़े प्रिंट करता है, इसलिए जानकारी कम अंतराल पर उपलब्ध है, और उच्च स्मृति आवंटन दर के अंतराल के दौरान और भी अधिक बार दिखाई देगी। यह शायद प्रदर्शन के मामले में थोड़ा सा खर्च करता है, लेकिन हमारी कामकाजी धारणा यह है कि हम इसे बर्दाश्त कर सकते हैं।
लॉग में उत्पादन तो दिखाई देता है:
Statistics for BinaryTreeDictionary:
------------------------------------
Total Free Space: 382153298
Max Chunk Size: 382064598
Number of Blocks: 28
Av. Block Size: 13648332
Tree Height: 8
विशेष रूप से, अधिक से अधिक मुक्त हिस्सा आकार 382,064,598 शब्द है। 64-बिट शब्दों के साथ यह 2 9 15 एमबी से कम होना चाहिए। यह संख्या लगभग 1 एमबी प्रति घंटे की दर से बहुत धीरे-धीरे घट रही है।
यह हमारी समझ है कि जब तक अधिकतम मुक्त खंड आकार युवा पीढ़ी (किसी भी humungous वस्तु आवंटन ग्रहण) से बड़ा है, हर वस्तु पदोन्नति सफल होना चाहिए।
हाल ही में, हमने कई दिनों के तनाव परीक्षण चलाए हैं, और देख रहे हैं कि सीएमएस कुल पुराने क्षेत्र अंतरिक्ष के 94% के ऊपर अधिकतम चंक आकार बनाए रखने में सक्षम था। अधिकतम मुक्त हिस्सा आकार 1 एमबी/घंटा से कम की दर से घट रहा है, जो ठीक होना चाहिए - इसके अनुसार हम जल्द ही किसी भी समय पूर्ण जीसी नहीं मारेंगे, और सर्वर शायद रखरखाव के लिए नीचे आ जाएंगे अक्सर पूर्ण जीसी से हो सकता है।
पिछले परीक्षण में, एक समय जब सिस्टम कम स्मृति कुशल था, हम सिस्टम को 10 घंटे के लिए चलाने में सक्षम हैं। पहले घंटे के दौरान, अधिकतम मुफ्त खंड आकार 100 एमबी तक घट गया है, जहां यह 8 घंटे से अधिक समय तक रहा। रन के आखिरी 40 मिनट के दौरान, अधिकतम जीबीसी होने पर अधिकतम फ्री चंक आकार 0 की स्थिर दर से कम हो गया है - यह बहुत उत्साहजनक था, क्योंकि उस वर्कलोड के लिए हमें 40 मिनट का अग्रिम प्राप्त करने में सक्षम होना प्रतीत होता था चेतावनी (जब खंड आकार 0 की ओर लगातार गिरावट शुरू हुई)।
मेरा प्रश्न: यह मानते हुए कि यह सब लंबे समय तक चोटी के वर्कलोड को दर्शाता है (उत्पादन में समय के किसी दिए गए बिंदु पर वर्कलोड केवल कम होगा), क्या यह एक वैध दृष्टिकोण की तरह लगता है? आप किस डिग्री की विश्वसनीयता मानते हैं कि हमें जीसी लॉग से अधिकतम मुफ्त खंड आकार आंकड़े पर भरोसा करने में सक्षम होना चाहिए?
हम निश्चित रूप से सुझावों के लिए खुले हैं, लेकिन अनुरोध करते हैं कि वे HotSpot (हमारे लिए कोई Azul, कम से कम अब तक) पर उपलब्ध समाधान तक ही सीमित रहें। इसके अलावा, जी 1 स्वयं ही कोई समाधान नहीं है जब तक कि हम एक समान मीट्रिक के साथ आ सकते हैं जो हमें पूर्ण जीसी, या किसी भी जीसी से पहले अग्रिम चेतावनी देगा जो हमारे एसएलए से काफी अधिक है (और ये कभी-कभी हो सकता है)।
क्या आपके लिए जेआरॉकिट निर्धारक जीसी का परीक्षण करना संभव है? http://docs.oracle.com/cd/E15289_01/doc.40/e15071/intro.htm#i1010645 – fglez
हम इसके बारे में जानते हैं, साथ ही साथ आईबीएम और ओरेकल के अन्य वास्तविक समय की पेशकश भी जानते हैं। हमारे लिए कुछ कमजोर गारंटी (या यहां तक कि केवल ह्युरिस्टिक्स) होना महत्वपूर्ण है जो हमें हॉटस्पॉट पर भी तैनात करने में सक्षम बनाता है। – nadavwr
क्या आपने वैकल्पिक नोड्स पर आवधिक पूर्ण जीसी को मजबूर करने पर विचार किया है? यह अधिक अनुमानित व्यवहार की अनुमति देगा। विखंडन बढ़ने के साथ ही लंबी अवधि में सीएमएस अनुमानित नहीं है। – fglez