क्या चल रहे जावा प्रोग्राम से ढेर आकार सेट करने का कोई तरीका है?रनटाइम पर जेवीएम ढेर आकार सेट करना
उत्तर
सं
आप है कि बहुत चर ढेर आवश्यकताओं -Xmx
और धुन -XX:MaxHeapFreeRatio
और -XX:MinHeapFreeRatio
साथ बहुत ही उच्च अपनी अधिकतम ढेर आकार इतना है कि एप्लिकेशन एक बहुत करने के लिए पर लटका नहीं होंगे स्थापित करने के लिए है एक अनुप्रयोग के साथ क्या कर सकते हैं जब ढेर ढीला होता है तो स्मृति की (यह डिफ़ॉल्ट सेटिंग्स के साथ करता है)।
लेकिन ध्यान दें कि यह प्रदर्शन समस्याओं का कारण बन सकता है जब ऐप द्वारा वास्तव में उपयोग की जाने वाली मेमोरी दृढ़ता से और तेज़ी से भिन्न होती है - उस स्थिति में आप ओएस को वापस देने के बजाय सभी मेमोरी पर लटकने से बेहतर होते हैं केवल एक बार बाद में दावा करने के लिए। आप यह सुनिश्चित करने के लिए GC options के साथ भी बेकार होना चाहेंगे कि जीसी बहुत अधिक अनधिकृत वस्तुओं को चारों ओर झूठ नहीं बोलता है, जो तब होता है जब ढेर के लिए बहुत सारे कमरे होते हैं, और जो चाहने के लक्ष्य को हरा देंगे ऐप की जरूरतों को समायोजित करने के लिए ढेर आकार।
java -Xmx500m
स्टार्टअप पर केवल
http://www.dreamincode.net/forums/showtopic96263.htm के अनुसार, आप इस क्रम में ऐसा नहीं कर सकते, लेकिन आप एक अलग ढेर आकार के साथ एक और प्रक्रिया अंडे कर सकते हैं।
पीछे की ओर एक विशाल दर्द के रूप में भी जाना जाता है। यदि आप बहुत सारी मेमोरी का उपयोग कर रहे हैं, तो आखिरी चीज जिसे आप करना चाहते हैं, इसे सब छोड़ दें, फिर इसे किसी अन्य प्रक्रिया में पुनः लोड करें। बेशक, आप डेटा को स्थानांतरित करने के लिए पुरानी प्रक्रिया को लंबे समय तक नहीं खोल सकते हैं क्योंकि आप केवल 2 प्रक्रियाओं के साथ स्थानांतरण को करने के लिए अधिक मेमोरी कर रहे हैं। बेहतर आशा है कि आपने सही _this_ समय अनुमान लगाया है या आप इसे फिर से करने के लिए मिलता है। – Basic
जब आप अपना आवेदन शुरू करते हैं तो आप उन सेटिंग्स को ट्विक कर सकते हैं लेकिन एक बार जब JVM ऊपर हो और उन मानों को चलाया जा सकता है। कुछ इस तरह:
java -Xms32m -Xmx512m FooBar
32MB करने के लिए कम से कम ढेर आकार और 512MB के लिए अधिकतम ढेर आकार सेट हो जाएगा। एक बार ये सेट हो जाने के बाद, आप उन्हें चल रहे प्रोग्राम में नहीं बदल सकते हैं।
यदि मैं आपके प्रश्न को सही ढंग से समझता हूं, तो आप रनटाइम पर ढेर आकार बदलने की कोशिश कर रहे हैं। मुझे कोई कारण नहीं दिख रहा है कि यह क्यों संभव होना चाहिए। JVM विकल्प का उपयोग करके स्टार्टअप पर हीप आकार सेट करें। मैं आपको सलाह देता हूं कि आपको -Xms
विकल्प केवल तभी सेट करें जब आपको पूरी तरह से आवश्यकता हो। यह विकल्प JVM के लिए आवंटित की गई प्रमुख स्मृति की प्रारंभिक मात्रा सेट करता है।
आपको पता होना चाहिए कि आपका एप्लिकेशन स्मृति के संदर्भ में कैसे व्यवहार करता है। बुद्धिमानी से -Xmx
का मान सेट करें। यदि आपका ऐप किसी प्रकार का सर्वर ऐप है तो आप उच्च मूल्य निर्धारित कर सकते हैं, अन्यथा क्लाइंट मशीनों और निश्चित रूप से उपलब्ध मेमोरी में चल रहे अन्य संभावित ऐप्स के साथ अपनी पसंद से समझौता कर सकते हैं।
मूल्य बुद्धिमानी से सेट करें ... हाँ, यह अच्छी सलाह है। लेकिन इस मामले पर विचार करें - आप देख रहे हैं कि आप अधिकतम ढेर के करीब आवेदन कैसे करते हैं, और आप इसके साथ कुछ भी नहीं कर सकते हैं। हां कोड में एक रिसाव है ... लेकिन पहले हमें दिन के दौरान जिंदा रखने की जरूरत है और फिर हम –
समस्या को ठीक करेंगे, यह भी ध्यान दें कि यह एक ऐपलेट या अन्य प्रकार का ऐप हो सकता है जहां आप वीएम स्टार्टअप को नियंत्रित नहीं करते हैं सेटिंग्स। वे मामले हैं जहां यह अच्छा होगा। मुख्य मुद्दा, मुझे लगता है कि यह है कि यदि आप इसे बदलने में सक्षम थे तो आप सुरक्षा संबंधी स्मृति समस्याओं में भाग सकते हैं। –
सर्वसम्मति वास्तव में यह हो सकती है कि यह संभव नहीं है, लेकिन हमें यह देखने के लिए JVM स्रोत को देखना चाहिए कि यह कैसे ergonomically नियंत्रित किया जा सकता है। यह बहुत अच्छा होगा कि एक JVMTI एजेंट ढेर/परम/कार्यरत/नया/& सी ऑनलाइन आकार/रनटाइम पर समायोजित करने में सक्षम हो।
यह क्या करेगा? यह एजेंटों को प्रदर्शन या पदचिह्न लक्ष्यों के आधार पर आकार समायोजन का अनुमान लगाने की अनुमति देगा जो क्लाउड में JVMs को स्थानांतरित करते समय महत्वपूर्ण होंगे।
यह एक उत्तर के बजाय एक JVM सुविधा अनुरोध की तरह पढ़ता है। । । – ruakh
मैंने खुद से एक ही प्रश्न पूछा। और ऊपर दिए गए उत्तरों के विपरीत कुछ ऐसा है जो मैं के बारे में कर सकता हूं, मेरे ऐप अधिकतम ढेर जेवीएम आकार को बढ़ा रहा है। यदि ऐप क्लस्टर मोड में एक वेब सर्वर है, तो मैं बदल गया न्यूनतम/अधिकतम ढेर आकार और शट डाउन प्रारंभिक उदाहरण के साथ एक नया उदाहरण शुरू कर सकता हूं।यह ग्लासफ़िश में विशेष रूप से सरल होगा जहां आपके पास प्रबंधन उदाहरण उदाहरण नोडएजेंट (ऐप सर्वर क्लस्टरर्ड इंस्टेंस) से अलग है।
चूंकि कई जेवीएम अनुप्रयोग वेब ऐप्स हैं, मुझे लगता है कि इस ब्लॉग में इसे संरक्षित करना उचित है।
आप स्टार्टअप पर -mx विकल्प (जिसे -Xmx जाना जाता है) यह अधिकतम आकार है आप कभी भी आवश्यकता चाहिए उपयोग कर सकते हैं जिसमें आप अधिकतम आकार आप की तुलना में अधिक के लिए यह निर्धारित करने की आवश्यकता नहीं होनी चाहिए कारण कभी आवश्यकता होगी
हालांकि, एक काम आसपास मुख्य है() अधिकतम आकार की जांच करें और यदि अधिकतम आकार वांछित नहीं है तो जावा को पुनरारंभ करें। यानी एक और जावा कार्यक्रम शुरू करें और मर जाओ।
यह आपको पहले से ही पता है कि आपको कितनी मेमोरी चाहिए। यह वेबसर्वर/अन्य चीजों के लिए ठीक है जो स्ट्रीम करते हैं, लेकिन यदि आप डेटा का विश्लेषण कर रहे हैं (एक इंडेक्स बनाना/प्रवृत्तियों की तलाश करना) तो आपको यह जानने की जरूरत है कि आपका डेटा क्या होगा, जो – Basic
@ बासिक है यह जानने की जरूरत है कि आपको कितनी मेमोरी चाहिए। -एक्सएमएक्स अधिकतम टीएच जेवीएम हो सकता है यानी प्रोग्राम को अधिक स्मृति का उपयोग करने के बजाय आउटऑफमेमरी एरर के साथ क्रैश होना चाहिए। यह अधिकतम आमतौर पर आपके पास कितनी मेमोरी है और डिफ़ॉल्ट मेमोरी का 1/4 है इस पर आधारित है। JVM आपके द्वारा अधिकतम सेट किए जाने के बावजूद "हैलो वर्ल्ड" प्रोग्राम के लिए बहुत सारी मेमोरी का उपयोग नहीं करेगा। –
मान लीजिए कि आपके पास एक प्रक्रिया है और इसे 50 गीगा मेमोरी अग्रिम में दें और चलने वाली नोटिस के दौरान बहुत सी जीसी चल रही है और शायद 56 जीबीबी बेहतर होगा और आप बहुत सारे पुनर्मूल्यांकन किए बिना प्रोग्राम को आसानी से पुनरारंभ नहीं कर सकते .. – kap
संदर्भ के लिए, यहां हॉटस्पॉट के लिए आरएफई है: bugs.sun.com/bugdatabase/view_bug.do?bug_id=4408373 –