תיקון: אירעה שגיאה במהלך אתחול ה- VM לא הצליחה לשריין מספיק מקום לערימת אובייקטים

למרות שיישומי Java אינם טכנולוגיית רשת פופולרית בימינו, יש אינספור סיבות לפרוס מכונה וירטואלית של Java ישירות על שרת לינוקס. אם אתה מנסה להריץ את פקודת Java java על הסף על חומרה נפרדת או בתוך ה- VM האישי שלה, ייתכן שתקבל הודעה "אירעה שגיאה במהלך האתחול של VM לא הצליחה לשריין מספיק מקום לערימת אובייקטים".

זה כנראה נראה מוזר למדי משום שסביר להניח שיש לך מספיק זיכרון RAM להפעלת הפקודה, אך זה נובע בעיקר משונה מסוימת באופן שבו דפי זיכרון פיזיים ווירטואליים מתרגלים. ציון כמה גדלים גדולים יחסית אמור לאפשר לך לעקוף לחלוטין את ההודעה הזו ולהפעיל את פקודת java כמו בכל סוג אחר.

שיטה 1: שימוש באפשרויות שורת פקודה

אם ניסית להריץ java וקיבלת את ההודעה הזו, כנראה שכבר הפעלת את הפקודה החינמית כדי לוודא שיש מספיק זיכרון להפעיל את התוכנית.

פקודות java וחינמיות

שים לב שבמכונת הבדיקה שלנו היה לנו 2.3 ג'יגה-בייט של זיכרון RAM ואף עמוד אחד של זיכרון וירטואלי לא נעשה שימוש. אם אתה מבחין שיש לך מחלת זיכרון, אז תרצה לסגור דברים אחרים שאתה מפעיל לפני שתנסה שוב. מצד שני, מי שגילה שיש להם שפע של זיכרון פנוי יכול לנסות לציין גודל ישירות.

לדוגמא, במכונה שלנו הצלחנו להריץ את הפקודה כ- java -Xms256m -Xmx512M וזה עבד כאילו היה מצפה אחרת. זה מגביל את גודל הערמה שהמכונה הווירטואלית של Java מנסה לשמור בעת ההפעלה. מכיוון שמכונה וירטואלית חסרת מעצורים יכולה לעשות דברים יוצאי דופן בהיפותטית, היא עשויה להשליך הודעות שגיאה על מערכת חופשית אחרת. ייתכן שתרצה גם לשחק עם שני הערכים האלה לפני שתמצא את השילוב הנכון.

זה יכול להיות בעיה ללא קשר למה אתה מריץ אותו מכיוון של- JVM אין שום קשר לסוג ה- VM שבו אתה משתמש להפעלת GNU / Linux.

שיטה 2: ייצוא המשתנים כדי להפוך את השינוי לקבוע

כאשר אתה מוצא ערך שעובד אתה יכול לייצא אותו כדי להפוך אותו לקבוע לאותה הפעלה. למשל, השתמשנו בייצוא _JAVA_OPTIONS = '- Xms256M -Xmx512M' משורת הפקודה bash והיא אפשרה לנו להפעיל את פקודת java בפני עצמה ללא אפשרויות אחרות עד שהתנתקנו מהשרת שלנו.

היה צורך להפעיל אותו שוב כשאנחנו נכנסים לסשן אחר, לכן כדאי להוסיף אותו לתסריטי ההפעלה הרלוונטיים אם בכוונתך להשתמש בפקודת java לעתים קרובות למדי. הוספנו את השורה לקובץ ה- .bash_login ונראה שהיא עובדת בכל פעם שהשתמשנו בהנחיית כניסה מבלי להצטרך להריץ אותה שוב, אם כי ייתכן שתצטרך למצוא עבורה מיקום אחר אם אתה עובד עם מעטפת אחרת.

אולי שמת לב שרק תצורות חומרה מסוימות מפעילות הודעת שגיאה זו. הסיבה לכך היא שבדרך כלל זה קורה במכונות עם הרבה זיכרון RAM פיזי אך אולימיטים נמוכים יותר לשימוש בהן. ג'אווה תנסה להקצות חסימה ענקית רק כדי שיגידו לה שהיא לא יכולה, שהיא מפרשת כמי שנגמר זיכרון.

שיטה 3: הדפסת אפשרויות Java הנוכחיות

אם עבדת בשורת הפקודה וברצונך לקבל התייחסות מהירה למה שהגדרת כרגע לערך _JAVA_OPTIONS, פשוט הפעל הד $ _JAVA_OPTIONS והוא ידפיס מייד את הערכים הנוכחיים. זה שימושי לפתרון בעיות כאשר אתה מנסה להבין את הספרות הנכונות לנסות.

זכור שלמרות שתיקון זה לא צריך לדרוש שום משחק אחר, ג'אווה תשליך את ההודעה "לא יכול היה לשמור מקום מספיק לערימת אובייקטים" אם אי פעם תמצא את עצמך באמת בקצה הקצר של הזיכרון הווירטואלי. אם זה המקרה, תרצה לבדוק אילו תהליכים פועלים כרגע ואולי להפעיל מחדש את השרת אם זו אפשרות. אתה יכול גם ליצור שטח החלפה רב יותר, אך אם זו בעיה, בדרך כלל עדיף לנסות ולתקן אותה בדרך אחרת.

במקרה הנדיר שההגדרות שלך נכונות אך הן עדיין לא עובדות, ודא שהתקנת את חבילת Java של 64 סיביות מכיוון שהיא אמורה להיות חסינה לבעיה זו. דרישות זיכרון רציפות חלות רק על גרסת Java של 32 סיביות. מצאנו בכמה מקרים גרסת 64 סיביות ניסתה ליצור מכונה וירטואלית של 32 סיביות, אז ציון האפשרות -d64 בשורת הפקודה תיקן אותה עבורנו.