ปัญหาที่มักพบเจอเกี่ยวกับการสร้าง Container สำหรับ JVM คือ
การกำหนดขนาดของ memory ให้นั่นเอง ซึ่งพบว่า
ถึงแม้จะกำหนดขนาดของ memory ตอนสร้าง container ไปแล้ว
แต่ตัว JVM มันก็ยังมีค่าของ Max Heap Size (Estimated) เป็นค่าที่สูงกว่า

ตัวอย่างเช่น

คำอธิบาย
กำหนดขนาด memory ของ container ให้ที่ 100 M
แต่ Heap Size ดันไปที่ 444.50M ??

ลองคิดดูสิว่า ถ้าเราดันไป run ระบบงานของเราด้วย java ปกติ
แน่นอนว่าเดี๋ยว JVM ใน container นี้โดน terminate แน่นอน ++

ปล. ปกติแล้วค่า default ของ Max Heap Size จะอยู่ที่ 1 ใน 4 ส่วนของหน่วยความจำหลัก !!

วิธีการแก้ไขปัญหานี้ คือ ทำการเพิ่ม option สำหรับ JVM ไปนิดหน่อย
เพื่อกำหนดขอบเขตของการจอง memory ของ Heap นั่นเอง ดังนี้

จะเห็นได้ว่า Max Heap ไม่เกินหน่วยความจำที่กำหนดให้แต่ละ container แล้ว
แต่มันใช้ไปประมาณ 2 ใน 4 เลยนะ
ดังนั้นลองกำหนดขนาดของ memory สำหรับ container สัก 1 GB สิ

ผลที่ได้คือ จองหน่วยความจำไป 1 ใน 4 จริง ๆ นะ

ถ้าต้องการให้ JVM จอง memory ทั้งหมด
สามารถใส่ -XX:MaxRAMFraction=1 เขาไปเพิ่มได้

ดังนั้นการ configuration ค่าต่าง ๆ ของ JVM จึงมีความสำคัญมาก ๆ

ปล. ใช้ memory เยอะจริง ๆ นะ

Reference Websites
https://dzone.com/articles/running-a-jvm-in-a-container-without-getting-kille