การแก้ไข: เกิดข้อผิดพลาดระหว่างการเริ่มต้น VM ไม่สามารถจองพื้นที่เพียงพอสำหรับฮีปวัตถุ



ลองใช้เครื่องมือของเราเพื่อกำจัดปัญหา

แม้ว่าแอปเพล็ต Java จะไม่ใช่เทคโนโลยีเว็บยอดนิยมในปัจจุบัน แต่ก็มีเหตุผลมากมายในการปรับใช้เครื่องเสมือน Java บนเซิร์ฟเวอร์ Linux โดยตรง หากคุณพยายามเรียกใช้คำสั่ง Linux java ทันทีบนฮาร์ดแวร์แยกหรือภายใน VM ของตัวเองคุณอาจได้รับ 'ข้อผิดพลาดที่เกิดขึ้นระหว่างการเริ่มต้น VM ไม่สามารถจองพื้นที่เพียงพอสำหรับข้อความฮีปวัตถุ'



สิ่งนี้อาจดูค่อนข้างแปลกเพราะคุณมี RAM มากกว่าที่จะรันคำสั่ง แต่ส่วนใหญ่เกิดจากความแปลกประหลาดที่เฉพาะเจาะจงในการใช้เพจหน่วยความจำจริงและเสมือน การระบุขนาดที่ค่อนข้างใหญ่จะช่วยให้คุณสามารถข้ามข้อความนี้ได้อย่างสมบูรณ์และเรียกใช้คำสั่ง java ในแบบที่คุณทำ



วิธีที่ 1: ใช้ตัวเลือกบรรทัดคำสั่ง

หากคุณพยายามเรียกใช้ java และได้รับข้อความนี้แสดงว่าคุณอาจเรียกใช้คำสั่งฟรีไปแล้วเพื่อให้แน่ใจว่ามีหน่วยความจำเพียงพอสำหรับเรียกใช้โปรแกรม



คำสั่ง java และฟรี

สังเกตว่าในเครื่องทดสอบของเราเรามี RAM จริง 2.3 GB และยังไม่มีการใช้หน่วยความจำเสมือนสักหน้าเดียว หากคุณสังเกตเห็นว่าคุณมีปัญหาเรื่องความทรงจำคุณจะต้องปิดสิ่งอื่น ๆ ที่คุณใช้งานอยู่ก่อนที่จะลองอีกครั้ง ในทางกลับกันผู้ที่พบว่ามีหน่วยความจำว่างเหลือเฟือสามารถลองระบุขนาดได้โดยตรง

ตัวอย่างเช่นบนเครื่องของเราเราสามารถรันคำสั่งเป็น java -Xms256m -Xmx512M และทำงานได้อย่างที่คาดไว้ สิ่งนี้ จำกัด ขนาดฮีปที่เครื่องเสมือน Java พยายามจองเมื่อเริ่มต้นระบบ เนื่องจากเครื่องเสมือนที่ไม่ถูก จำกัด สามารถทำสิ่งผิดปกติได้โดยสมมุติฐานจึงอาจส่งข้อความแสดงข้อผิดพลาดไปยังระบบที่ไม่เสียค่าใช้จ่าย คุณอาจต้องการเล่นกับทั้งสองค่าก่อนที่จะพบชุดค่าผสมที่เหมาะสม



ปัญหานี้อาจเป็นปัญหาได้ไม่ว่าคุณจะใช้งานอะไรเนื่องจาก JVM ไม่มีส่วนเกี่ยวข้องกับประเภทของ VM ที่คุณอาจใช้เพื่อเรียกใช้ GNU / Linux

วิธีที่ 2: การเอ็กซ์พอร์ตตัวแปรเพื่อทำการเปลี่ยนแปลงถาวร

เมื่อคุณพบค่าที่ใช้งานได้คุณสามารถส่งออกเพื่อทำให้เป็นค่าถาวรสำหรับเซสชันนั้น ตัวอย่างเช่นเราใช้การส่งออก _JAVA_OPTIONS = ’- Xms256M -Xmx512M’ จากพรอมต์คำสั่ง bash และอนุญาตให้เราเรียกใช้คำสั่ง java ด้วยตัวเองโดยไม่มีตัวเลือกอื่นใดจนกว่าเราจะออกจากระบบเซิร์ฟเวอร์ของเรา

จำเป็นต้องเรียกใช้อีกครั้งเมื่อเราเข้าสู่ระบบในเซสชันอื่นดังนั้นคุณอาจต้องการเพิ่มลงในสคริปต์เริ่มต้นที่เกี่ยวข้องหากคุณวางแผนที่จะใช้คำสั่ง java ค่อนข้างบ่อย เราได้เพิ่มบรรทัดลงในไฟล์. bash_login ของเราและดูเหมือนว่าจะใช้งานได้ทุกครั้งที่เราใช้พรอมต์การเข้าสู่ระบบโดยไม่ต้องเรียกใช้อีกครั้งแม้ว่าคุณอาจต้องหาตำแหน่งอื่นหากคุณกำลังทำงานกับเชลล์อื่น

คุณอาจสังเกตเห็นว่ามีเพียงการกำหนดค่าฮาร์ดแวร์บางอย่างเท่านั้นที่ทำให้เกิดข้อความแสดงข้อผิดพลาดนี้ นั่นเป็นเพราะโดยปกติแล้วจะเกิดขึ้นกับเครื่องที่มี RAM จริงเป็นจำนวนมาก แต่มีประสิทธิภาพต่ำกว่าสำหรับวิธีใช้งาน Java จะพยายามจัดสรรบล็อกขนาดใหญ่เพียงเพื่อที่จะบอกว่าทำไม่ได้ซึ่งตีความว่าหน่วยความจำหมด

วิธีที่ 3: การพิมพ์ตัวเลือก Java ปัจจุบัน

หากคุณทำงานในบรรทัดคำสั่งและต้องการข้อมูลอ้างอิงอย่างรวดเร็วเกี่ยวกับสิ่งที่คุณได้ตั้งค่า _JAVA_OPTIONS ไว้ในปัจจุบันให้เรียกใช้ echo $ _JAVA_OPTIONS จากนั้นมันจะพิมพ์ค่าปัจจุบันออกมาทันที สิ่งนี้มีประโยชน์สำหรับการแก้ปัญหาเมื่อคุณพยายามหาตัวเลขที่ถูกต้องเพื่อลองใช้

โปรดทราบว่าในขณะที่การแก้ไขนี้ไม่จำเป็นต้องมีการเล่นอื่น ๆ แต่ Java จะทิ้งข้อความ“ ไม่สามารถสงวนพื้นที่เพียงพอสำหรับวัตถุฮีป” หากคุณพบว่าตัวเองมีหน่วยความจำเสมือนในระยะสั้น ในกรณีนี้คุณจะต้องตรวจสอบอีกครั้งว่ากระบวนการใดกำลังทำงานอยู่และอาจรีสตาร์ทเซิร์ฟเวอร์หากเป็นตัวเลือก คุณยังสามารถสร้างพื้นที่สว็อปเพิ่มเติมได้ แต่หากเป็นปัญหาโดยทั่วไปควรพยายามแก้ไขด้วยวิธีอื่นจะดีกว่า

ในกรณีที่เกิดขึ้นได้ยากที่การตั้งค่าของคุณดูเหมือนจะถูกต้อง แต่ยังใช้งานไม่ได้ให้ตรวจสอบว่าคุณได้ติดตั้งแพ็คเกจ Java 64 บิตแล้วเนื่องจากควรป้องกันปัญหานี้ ข้อกำหนดหน่วยความจำที่ต่อเนื่องใช้กับ Java เวอร์ชัน 32 บิตเท่านั้น เราพบในบางกรณีที่เวอร์ชัน 64 บิตพยายามสร้างเครื่องเสมือน 32 บิตดังนั้นการระบุอ็อพชัน -d64 ในบรรทัดคำสั่งจึงได้รับการแก้ไขสำหรับเรา

อ่าน 3 นาที