फिक्स: VM के आरंभीकरण के दौरान हुई त्रुटि ऑब्जेक्ट हीप के लिए पर्याप्त स्थान आरक्षित नहीं कर सकती है



समस्याओं को खत्म करने के लिए हमारे साधन का प्रयास करें

भले ही इन दिनों जावा एप्लेट एक लोकप्रिय वेब तकनीक नहीं है, लेकिन लिनक्स सर्वर पर जावा वर्चुअल मशीन को सीधे तैनात करने के अनगिनत कारण हैं। यदि आप लिनक्स जावा कमांड को या तो असतत हार्डवेयर पर या इसके स्वयं के वीएम के अंदर चलाने की कोशिश करते हैं, तो आपको 'त्रुटि के दौरान हुई वीएम के प्रारंभ के दौरान ऑब्जेक्ट हीप के लिए पर्याप्त स्थान आरक्षित नहीं हो सकता है' मिल सकता है।



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



विधि 1: कमांड लाइन विकल्प का उपयोग करना

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



जावा और फ्री कमांड

ध्यान दें कि हमारी परीक्षण मशीन में हमारे पास 2.3 जीबी की भौतिक रैम थी और वर्चुअल मेमोरी का एक भी पेज अभी तक इस्तेमाल नहीं किया गया था। यदि आपको लगता है कि आपके पास एक मेमोरी क्रंच है, तो आप उन अन्य चीजों को बंद करना चाहते हैं, जिन्हें आप फिर से कोशिश करने से पहले चला रहे हैं। दूसरी ओर, जिन लोगों ने पाया कि उनके पास बहुत सारी मुफ्त मेमोरी है वे सीधे आकार निर्दिष्ट करने का प्रयास कर सकते हैं।

उदाहरण के लिए, हमारी मशीन पर हम java -Xms256m -Xmx512M के रूप में कमांड को चलाने में सक्षम थे और यह इस तरह से काम करता था, जैसा कि अन्यथा अपेक्षित था। यह जावा वर्चुअल मशीन स्टार्टअप पर आरक्षित करने का प्रयास करता है। चूंकि एक अनर्गल आभासी मशीन काल्पनिक रूप से असामान्य चीजें कर सकती है, इसलिए यह एक अन्यथा मुक्त सिस्टम पर त्रुटि संदेश फेंक सकता है। सही संयोजन खोजने से पहले आप उन दो मूल्यों के साथ खेलना चाहते हैं।



यह इस बात की परवाह किए बिना हो सकता है कि आप इस पर क्या चल रहे हैं क्योंकि जेवीएम का उस तरह के वीएम से कोई लेना-देना नहीं है जिसे आप GNU / लिनक्स चलाने के लिए इस्तेमाल कर रहे हैं।

विधि 2: परिवर्तन स्थायी करने के लिए चर का निर्यात करना

जब आपको एक मूल्य मिलता है जो काम करता है तो आप इसे उस सत्र के लिए स्थायी बनाने के लिए निर्यात कर सकते हैं। उदाहरण के लिए, हमने bash कमांड प्रॉम्प्ट से निर्यात _JAVA_OPTIONS = '- Xms256M -Xmx512M' का उपयोग किया और इसने हमें अपने सर्वर से लॉग आउट होने तक किसी अन्य विकल्प के बिना जावा कमांड चलाने की अनुमति दी।

जब हम किसी अन्य सत्र में लॉग इन करते हैं तो इसे फिर से चलाने की आवश्यकता होती है, इसलिए यदि आप जावा कमांड का उपयोग करना चाहते हैं, तो आप इसे किसी भी संबंधित स्टार्टअप स्क्रिप्ट में जोड़ना चाह सकते हैं। हमने अपनी .bash_login फ़ाइल में पंक्ति जोड़ दी और ऐसा लगता है कि जब भी हम उसे दोबारा चलाने के बिना लॉगिन प्रॉम्प्ट का उपयोग करते हैं तो हर बार काम करते हैं, हालांकि यदि आप एक अलग शेल के साथ काम कर रहे हैं तो आपको इसके लिए कोई अन्य स्थान ढूंढना पड़ सकता है।

आपने देखा होगा कि केवल कुछ हार्डवेयर कॉन्फ़िगरेशन इस त्रुटि संदेश को ट्रिगर करते हैं। ऐसा इसलिए है क्योंकि यह आमतौर पर भौतिक रैम की एक बड़ी डील वाली मशीनों पर होता है लेकिन इसका उपयोग कैसे करना है, इसके लिए कम लाभ हैं। जावा केवल एक विशाल ब्लॉक को आवंटित करने का प्रयास करेगा जिसे यह नहीं बताया जा सकता है कि यह स्मृति से बाहर चलने के रूप में व्याख्या करता है।

विधि 3: वर्तमान जावा विकल्प मुद्रण

यदि आप कमांड लाइन पर काम कर रहे हैं और जो भी आप वर्तमान में _JAVA_OPTIONS मान सेट करना चाहते हैं, उसका त्वरित संदर्भ चाहते हैं, तो बस इको $ _JAVA_OPTIONS चलाएं और यह तुरंत वर्तमान मानों का प्रिंट आउट लेगा। समस्या निवारण के लिए यह तब उपयोगी है जब आप कोशिश करने के लिए सही अंकों का पता लगाने की कोशिश कर रहे हैं।

ध्यान रखें कि जब इस फिक्स को किसी अन्य के आसपास खेलने की आवश्यकता नहीं होती है, तो जावा आपको 'ऑब्जेक्ट हीप के लिए पर्याप्त स्थान आरक्षित नहीं कर सकता' संदेश को बाहर फेंक देगा यदि आप कभी भी वर्चुअल मेमोरी के कम अंत में खुद को वास्तव में पाते हैं। यदि यह मामला है, तो आप यह देखना चाहते हैं कि वर्तमान में कौन सी प्रक्रियाएँ चल रही हैं और यदि यह विकल्प है तो संभवतः सर्वर को पुनः आरंभ करें। आप अधिक स्वैप स्थान भी बना सकते हैं, लेकिन अगर यह एक ऐसा मुद्दा है जिसे आमतौर पर किसी और तरीके से आज़माना और इसे बेहतर बनाना है।

इस मामले में कि आपकी सेटिंग्स सही प्रतीत होती हैं, लेकिन यह अभी भी काम नहीं कर रहा है, सुनिश्चित करें कि आपने 64-बिट जावा पैकेज स्थापित किया है क्योंकि यह इस समस्या के लिए प्रतिरक्षात्मक होना चाहिए। संचित स्मृति आवश्यकताएँ केवल जावा के 32-बिट संस्करण पर लागू होती हैं। हमने कुछ मुट्ठी भर मामलों में पाया कि 64-बिट संस्करण ने 32-बिट वर्चुअल मशीन बनाने की कोशिश की, इसलिए कमांड लाइन पर -d64 विकल्प को निर्दिष्ट करके इसे हमारे लिए निर्धारित किया।

3 मिनट पढ़ा