إصلاح: حدث خطأ أثناء تهيئة الجهاز الظاهري لا يمكنه حجز مساحة كافية لكومة الكائنات



جرب أداة القضاء على المشاكل

على الرغم من أن تطبيقات Java الصغيرة ليست تقنية ويب شائعة هذه الأيام ، إلا أن هناك أسبابًا لا حصر لها لنشر جهاز Java الظاهري مباشرة على خادم Linux. إذا حاولت تشغيل أمر Linux java بشكل مباشر إما على جهاز منفصل أو داخل جهاز VM الخاص به ، فقد تحصل على رسالة 'حدث خطأ أثناء تهيئة الجهاز الظاهري لم يتمكن من حجز مساحة كافية لكومة الكائنات'.



ربما يبدو هذا غريبًا إلى حد ما لأن لديك ذاكرة وصول عشوائي (RAM) كافية على الأرجح لتشغيل الأمر ، ولكن يرجع ذلك إلى حد كبير إلى مشكلة معينة في طريقة استخدام صفحات الذاكرة الفعلية والظاهرية. يجب أن يسمح لك تحديد بعض الأحجام الكبيرة نسبيًا بتجاوز هذه الرسالة تمامًا وتشغيل أمر جافا بالطريقة التي تريدها لأي أمر آخر.



الطريقة الأولى: استخدام خيارات سطر الأوامر

إذا كنت قد حاولت تشغيل جافا وتلقيت هذه الرسالة ، فمن المحتمل أنك قمت بالفعل بتشغيل الأمر المجاني للتأكد من وجود إمدادات كافية من الذاكرة لتشغيل البرنامج.



جافا وأوامر مجانية

لاحظ أنه على جهاز الاختبار الخاص بنا كان لدينا حوالي 2.3 غيغابايت من ذاكرة الوصول العشوائي الفعلية ولم يتم استخدام صفحة واحدة من الذاكرة الافتراضية حتى الآن. إذا لاحظت أن لديك أزمة في الذاكرة ، فسترغب في إغلاق الأشياء الأخرى التي قمت بتشغيلها قبل تجربتها مرة أخرى. من ناحية أخرى ، يمكن لأولئك الذين وجدوا أن لديهم الكثير من الذاكرة الخالية محاولة تحديد الحجم مباشرة.

على سبيل المثال ، تمكنا على جهازنا من تشغيل الأمر كـ java -Xms256m -Xmx512M وعمل كما كان متوقعًا لولا ذلك. يؤدي هذا إلى تقييد حجم الكومة الذي يحاول جهاز Java الظاهري حجزه عند بدء التشغيل. نظرًا لأن الآلة الافتراضية غير المقيدة يمكنها افتراضيًا القيام بأشياء غير عادية ، فقد تلقي رسائل خطأ على نظام مجاني بخلاف ذلك. قد ترغب أيضًا في التلاعب بهاتين القيمتين قبل العثور على المجموعة الصحيحة.



يمكن أن تكون هذه مشكلة بغض النظر عن ما تقوم بتشغيله عليه نظرًا لأن JVM لا علاقة له بنوع الجهاز الظاهري الذي قد تستخدمه لتشغيل GNU / Linux.

الطريقة الثانية: تصدير المتغيرات لجعل التغيير دائمًا

عندما تجد قيمة تعمل ، يمكنك تصديرها لجعلها دائمة لتلك الجلسة. على سبيل المثال ، استخدمنا export _JAVA_OPTIONS = '- Xms256M -Xmx512M' من موجه أوامر bash وسمح لنا بتشغيل أمر java بنفسه دون أي خيارات أخرى حتى نقوم بتسجيل الخروج من الخادم الخاص بنا.

يجب تشغيله مرة أخرى عند تسجيل الدخول إلى جلسة أخرى ، لذلك قد ترغب في إضافته إلى أي نصوص برمجية لبدء التشغيل ذات الصلة إذا كنت تخطط لاستخدام الأمر java كثيرًا. لقد أضفنا السطر إلى ملف .bash_login الخاص بنا ويبدو أنه يعمل في كل مرة استخدمنا فيها مطالبة تسجيل الدخول دون الحاجة إلى تشغيله مرة أخرى ، على الرغم من أنك قد تضطر إلى البحث عن موقع آخر له إذا كنت تعمل مع shell مختلف.

ربما لاحظت أن تكوينات أجهزة معينة فقط هي التي تؤدي إلى ظهور رسالة الخطأ هذه. هذا لأنه يحدث عادةً على الأجهزة التي تحتوي على قدر كبير من ذاكرة الوصول العشوائي الفعلية ولكن أقل من ulimits لكيفية استخدامها. ستحاول Java تخصيص كتلة ضخمة فقط ليتم إخبارها بأنها لا تستطيع ، الأمر الذي يفسر على أنه نفاد الذاكرة.

الطريقة الثالثة: طباعة خيارات Java الحالية

إذا كنت تعمل في سطر الأوامر وتريد مرجعًا سريعًا لما قمت بتعيين قيمة _JAVA_OPTIONS إليه حاليًا ، فما عليك سوى تشغيل echo $ _JAVA_OPTIONS وسيطبع القيم الحالية على الفور. هذا مفيد في استكشاف الأخطاء وإصلاحها عندما تحاول معرفة الأرقام الصحيحة لتجربتها.

ضع في اعتبارك أنه على الرغم من أن هذا الإصلاح لا ينبغي أن يتطلب أي لعبة أخرى ، فإن Java ستطرد رسالة 'تعذر حجز مساحة كافية لكومة الكائنات' إذا وجدت نفسك في النهاية القصيرة للذاكرة الافتراضية. إذا كانت هذه هي الحالة ، فسترغب في إعادة التحقق من العمليات التي يتم تشغيلها حاليًا وربما إعادة تشغيل الخادم إذا كان هذا خيارًا. يمكنك أيضًا إنشاء المزيد من مساحة التبديل ، ولكن إذا كانت هذه مشكلة ، فمن الأفضل عمومًا محاولة تصحيحها بطريقة أخرى.

في الحالات النادرة التي تبدو فيها إعداداتك صحيحة ولكنها لا تزال لا تعمل ، تأكد من تثبيت حزمة Java 64 بت حيث يجب أن تكون محصنة ضد هذه المشكلة. تنطبق متطلبات الذاكرة المجاورة فقط على إصدار 32 بت من Java. وجدنا في عدد قليل من الحالات أن الإصدار 64 بت حاول إنشاء جهاز افتراضي 32 بت ، لذا فإن تحديد الخيار -d64 في سطر الأوامر قد تم إصلاحه لنا.

3 دقائق للقراءة