2010-05-21 16 views
7

मेरे पास मेरी मशीन में एक जेवीएम सर्वर है, अब मैं एक ही मशीन में बैठे मेरे 2 एपसेवर चाहता हूं, हालांकि मैं चाहता हूं कि स्टैंडबाय एक xmx के साथ आवंटित स्मृति की वास्तव में कम मात्रा में हो क्योंकि इसका निष्क्रिय, एक मुख्य सर्वर (सक्रिय) नीचे चला जाता है, मैं अपने निष्क्रिय सर्वर पर अधिक मेमोरी आवंटित करना चाहता हूं जो पहले से ही इसे पुनरारंभ किए बिना है (मेरे पास दोनों में बहुत अधिक xmx है - नोट वे स्टार्टअप पर स्मृति का उपभोग करेंगे और मैं नहीं कर सकता आउटऑफमोरी की संभावना की अनुमति दें)।जावा रनटाइम पर xmx गतिशील रूप से

तो मुझे निष्क्रिय - कम xmx एक बार सक्रिय हो जाने के बाद मैं चाहता हूं कि मेरा निष्क्रिय अधिक xmx प्राप्त करे।

मेरे लिए इसे प्राप्त करने का एक तरीका है। धन्यवाद

उत्तर

5

यह अच्छा होगा, लेकिन जहां तक ​​मुझे पता है कि यह सूर्य के साथ JVMs प्रदान करने का विकल्प नहीं है।

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

यह सुनिश्चित करने के लिए कि आपका जेवीएम बहुत कम स्मृति के साथ शुरू नहीं होता है (बहुत सारे विराम बनाते हैं क्योंकि यह आवश्यक आकार में स्मृति को बढ़ाता है), उस आकार को एक्सएमएस समायोजित करें जिसे आप स्टार्टअप पर JVM के लिए आवंटित करना चाहते हैं।

+0

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

+2

@Jas मुझे लगता है कि अभ्यास में, JVM आपके द्वारा उपयोग किए जाने वाले सभी चीज़ों का उपयोग करेगा। यहां तक ​​कि यदि आपके पास केवल 10 एमबी हार्ड-रेफरेंस ऑब्जेक्ट्स हैं, यदि आप इसे -Xmx100G देते हैं, तो यह 100 जी का उपयोग करेगा, भले ही स्मृति में लगभग सभी ऑब्जेक्ट्स एकत्र किए जा सकें। और यही कारण है कि वे हमें इसे निर्दिष्ट करते हैं - क्योंकि वे नहीं जानते कि मेमोरी को कैसे प्रबंधित किया जाए ताकि इसे स्वचालित रूप से बढ़ाना पड़े। – Trejkaz

3

संक्षिप्त उत्तर तब तक नहीं है जब तक कि आपका विशेष JVM प्रारंभिकरण के बाद इन मानों को बदलने की अनुमति नहीं देता है, आप नहीं कर सकते (मुझे विश्वास है कि यह हॉटस्पॉट का मामला है)।

हालांकि, आप फ्लाई पर एक्सएमएक्स को बदले बिना अपने लक्ष्यों को पूरा करने में सक्षम हो सकते हैं। उदाहरण के लिए, आप एक छोटी -Xms सेटिंग का उपयोग कर सकते हैं, लेकिन -Xmx अपेक्षाकृत उच्च रखें। यदि निष्क्रिय सर्वर बैकअप के रूप में सेवा करते समय बहुत मेमोरी/कचरा उत्पन्न करने का उपयोग नहीं कर रहा है, तो स्मृति Xms मान के पास रहेगी। हालांकि, बैकअप सर्वर खत्म होने के बाद इसे आवंटित मेमोरी को Xmx मान को आवश्यक आधार पर विस्तारित करने की अनुमति दी जाएगी।

java (windows) या java (*nix) के रूप में उपयुक्त देखें (हालांकि -Xms और -Xmx सभी प्लेटफार्मों पर ही सामान्य अर्थ है)।

2

आपको स्टैंडबाय इंस्टेंस पर एक्सएमएक्स को समायोजित करने की आवश्यकता नहीं है जब तक कि यह कुछ भी नहीं कर रहा है (या कुछ भी ज्यादा) क्योंकि यह आपके द्वारा वास्तविक काम करने तक XMS के साथ सेट किए गए मान के करीब रहना चाहिए।

एक्सएमएक्स स्विच जावा इंस्टेंस का उपभोग करने वाले अधिकतम आकार के ढेर आकार को नियंत्रित करता है। एक्सएमएस स्टार्टअप राशि को नियंत्रित करता है।

यदि आप अपने स्टैंडबाय इंस्टेंस और एक्सएमएक्स पर एक्सएमएस को छोटे से सेट करते हैं, तो आपके प्रोग्राम की ज़रूरतों को अधिकतम करने के लिए, और फिर स्टैंडबाय इंस्टेंस (नियमित उदाहरण को मारना) पर स्विच करें, इसे ठीक से काम करना चाहिए।

आपकी उपलब्ध स्मृति के आधार पर नियमित जावा प्रक्रिया को वास्तव में रोकना/मारना आवश्यक हो सकता है ताकि स्टैंडबाय प्रक्रिया को सभी ढेर आवंटित करने के लिए आवश्यक हो क्योंकि यह शुरुआती निचले ढेर आकार से अधिकतम तक की ओर जाता है।

+0

एक बार जब मैं JVM XMX = बताता हूं तो मेरे विचार में मेरा कोई नियंत्रण नहीं होता है और मैं 100% नहीं हो सकता, जेवीएम स्मृति का उपयोग नहीं करेगा, जो जानता है कि जेवीएम कुछ समय बाद फैसला करेगा स्मृति चाहता है - आखिरकार मैं इसके नियंत्रण में नहीं हूं और मैं किसी भी मौका की अनुमति नहीं दे सकता हूं, भले ही यह 1% मौका है कि जेवीएम तय करेगा कि इसे और अधिक मेमोरी चाहिए - यह आंतरिक रूप से कई चीजें कर रहा है, शायद यह तय करेगा कि इसे मेरे बिना और अधिक चाहिए एप्लिकेशन को और अधिक की आवश्यकता है, मेरे स्टैंडबाय ऐप सर्वर में कुछ थ्रेड हैं जो पूरी तरह से जमे हुए ऐप की तरह नहीं हैं ... – Jas

+0

इसलिए मेरा डर यह है कि हालांकि मैं उच्च एक्सएमएक्स निर्दिष्ट करता हूं और यह किसी बिंदु पर स्टैंडबाय है, लेकिन स्टैंडबाय उस स्मृति तक पहुंच जाएगा * सिर्फ इसलिए * जेवीएम तय करेगा कि इसकी आवश्यकता है (शायद इसमें कुछ एल्गोरिदम है जो मुझे पता नहीं है)। – Jas

+1

@ जेसन बस आप जिस विशिष्ट JVM का उपयोग कर रहे हैं उसके साथ इसे आज़माएं। आप बाहरी मॉनीटर चला सकते हैं (एक अच्छे ओपन सोर्स के लिए hyperic.org देखें) जो जेवीएम मेमोरी उपयोग और कई अन्य आंकड़ों को ट्रैक करता है। हाइपरिक आपको सतर्क कर सकता है अगर स्टैंडबाय एक और स्मृति का उपभोग करना शुरू कर देता है। –

0

सभी ढेर को भरने के लिए जेवीएम के लिए, आपको युवा पीढ़ी के संग्रह से बचने वाली पर्याप्त वस्तुओं को उत्पन्न करना होगा। हल्के ढंग से लोड किए गए स्टैंड-बाय सर्वर पर यह असंभव नहीं होगा।

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

अपडेट: नया जी 1 कलेक्टर विभिन्न कॉन्फ़िगरेशन विकल्पों का उपयोग करता है। अधिक जानने के लिए PL12 http://www.oracle.com/technetwork/tutorials/tutorials-1876574.html पर देखें। विकल्प आपके मामले के लिए सबसे अधिक प्रासंगिक

-XX होगा: InitiatingHeapOccupancyPercent = 45 - (पूरे) ढेर अधिभोग एक समवर्ती जीसी चक्र शुरू करने के लिए का प्रतिशत। इसका उपयोग जी 1 द्वारा पूरे ढेर के अधिग्रहण के आधार पर एक समवर्ती जीसी चक्र को ट्रिगर करने के लिए किया जाता है, न केवल पीढ़ियों में से एक। 0 का मान 'निरंतर जीसी चक्र' करता है। डिफ़ॉल्ट मान 45 है (यानी, 45% पूर्ण या कब्जा कर लिया गया)।

आईओयू, युवा पीढ़ी के संग्रह के बराबर शुरू होगा जब वर्तमान ढेर (प्रारंभ में न्यूनतम ढेर आकार) 45% उपयोग किया जाता है। आपके लाइट-लोड सर्वर को कभी भी न्यूनतम ढेर आकार नहीं छोड़ना चाहिए (जब तक यह अपेक्षाकृत लंबी जीवित वस्तुओं का उत्पादन नहीं करता है, इस मामले में -XX: मैक्सटेनिंग थ्रेसहोल्ड)।

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