Quantcast
Channel: cc :: somkiat
Viewing all articles
Browse latest Browse all 1997

[Docker] แก้ไขปัญหาเรื่อง JVM กิน memory เยอะเกินเหตุ !!

$
0
0

ปัญหาที่มักพบเจอเกี่ยวกับการสร้าง Container สำหรับ JVM คือ การกำหนดขนาดของ memory ให้นั่นเอง ซึ่งพบว่า ถึงแม้จะกำหนดขนาดของ memory ตอนสร้าง container ไปแล้ว แต่ตัว JVM มันก็ยังมีค่าของ Max Heap Size (Estimated) เป็นค่าที่สูงกว่า ตัวอย่างเช่น [gist id="df4d754001b4c2a5b5db33d9c164a43d" file="1.txt"] คำอธิบาย กำหนดขนาด memory ของ container ให้ที่ 100 M แต่ Heap Size ดันไปที่ 444.50M ?? ลองคิดดูสิว่า ถ้าเราดันไป run ระบบงานของเราด้วย java ปกติ แน่นอนว่าเดี๋ยว JVM ใน container นี้โดน terminate แน่นอน ++
ปล. ปกติแล้วค่า default ของ Max Heap Size จะอยู่ที่ 1 ใน 4 ส่วนของหน่วยความจำหลัก !!
วิธีการแก้ไขปัญหานี้ คือ ทำการเพิ่ม option สำหรับ JVM ไปนิดหน่อย เพื่อกำหนดขอบเขตของการจอง memory ของ Heap นั่นเอง ดังนี้ [gist id="df4d754001b4c2a5b5db33d9c164a43d" file="2.txt"] จะเห็นได้ว่า Max Heap ไม่เกินหน่วยความจำที่กำหนดให้แต่ละ container แล้ว แต่มันใช้ไปประมาณ 2 ใน 4 เลยนะ ดังนั้นลองกำหนดขนาดของ memory สำหรับ container สัก 1 GB สิ [gist id="df4d754001b4c2a5b5db33d9c164a43d" file="3.txt"] ผลที่ได้คือ จองหน่วยความจำไป 1 ใน 4 จริง ๆ นะ ถ้าต้องการให้ JVM จอง memory ทั้งหมด สามารถใส่ -XX:MaxRAMFraction=1 เขาไปเพิ่มได้ [gist id="df4d754001b4c2a5b5db33d9c164a43d" file="4.txt"] ดังนั้นการ configuration ค่าต่าง ๆ ของ JVM จึงมีความสำคัญมาก ๆ ปล. ใช้ memory เยอะจริง ๆ นะ Reference Websites https://dzone.com/articles/running-a-jvm-in-a-container-without-getting-kille

Viewing all articles
Browse latest Browse all 1997

Trending Articles