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

แม้ว่า Java applets จะไม่ใช่เทคโนโลยีเว็บยอดนิยมในปัจจุบัน แต่ก็มีเหตุผลมากมายในการปรับใช้เครื่องเสมือน 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 ทางกายภาพจำนวนมาก แต่มี ulimits ต่ำกว่าสำหรับวิธีการใช้งาน Java จะพยายามจัดสรรบล็อกขนาดใหญ่เพื่อให้บอกว่าทำไม่ได้ซึ่งจะตีความว่าหน่วยความจำหมด

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

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

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

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