จากบทความเรื่อง The State of Java on Kubernetes 2026
บอกว่าการใช้งาน Java บน Kubernetes นั้นส่วนใหญ่ใช้งานไม่ถูกต้อง
หรือใช้งานด้วยค่า default จึงส่งผลต่อ performance และ ค่าใช้จ่ายสูงเกินความจำเป็น
จากการสำรวจพบว่า บริษัทขนาดใหญ่ใช้ Java มากกว่า 68%
โดยส่วนใหญ่จะใช้งาน Java 17 และ 21 เป็นหลัก
ถึงแม้จะมีการใช้งานบน Kubernetes เยอะขึ้นมาก
แต่เรื่องของ performance กลับแย่ แถมใช้ค่า default setting อีกด้วย
รวมทั้งค่าใช้จ่ายก็สูงขึ้นมาก
นั่นคือประสิทธิภาพของการใช้งานแย่มาก ๆ
ดังนั้นมาดูแนวทางการแก้ไขกันบ้าง ว่ามีอะไรบ้าง ทำอย่างไร ?
เรื่องแรกคือ ไม่ทำการ config หรือ tuning JVM เลย ไม่ใช่ปัญหาใหม่อะไร แต่มักไม่ทำกัน ซึ่งมีมากถึง 60%
แสดงผลดังรูป

พบว่าไม่กำหนดค่าทั้ง GC และ memory heap size
รวมทั้งยังเจอว่าแต่ละ Pods นั้นกำหนดค่า
limit resource ทั้ง CPU ที่น้อยกว่า 1 core และ memory น้อยกว่า 1 GB
ซึ่งส่งผลต่อการทำงานแบบ multi-thread ของ Java อย่างแรง !!

ดังนั้นสิ่งที่ควรทำคือ การ tuning ให้เหมาะสมกับ workload
รวมทั้งการทำงานของระบบงานด้วย
ไม่ใช่คาดหวังว่ามันจะทำงานให้ดีเองแบบอัตโนมัติ
ถ้าไม่กำหนด GC ไว้ ทาง JVM จะเลือกให้เอง ตามภาพ
ถ้า GC เหมาะกับระบบที่ high throughput และ low latency คือ G1
แต่ต้องมี resource ให้ใช้ตามนี้ด้วย
- อย่างน้อย 2 CPUs
- อย่างน้อย RAM ขนาด 1791 MB
แต่ถ้าน้อยกว่านี้จะใช้งาน Serial GC เองเลย
ซึ่งส่งผลกระทบต่อการทำงานอย่างมาก !!

ต่อมาคือการกำหนดค่าของ memory ที่ใช้งาน
พบว่าไม่กำหนด min และ max ของ heap memory เลย (ค่า -Xmx หรือ -XX:MaxRAMPercentage)
นั่นคือแล้วแต่เวรแต่กรรมของ container management
และ JVM จะใช้ประมาณ 25% ของ container limit !!
และเมื่อมีการใช้งานมากขึ้น GC ก็ทำงานมากขึ้น
เพื่อทำการ claim memory ให้ใหม่
ส่งผลให้ cPU peak ขึ้นมาก และ ส่งผลกระทบต่อ latency ของการทำงานอีก !!
จากนั้นมาลองทำการ load testing ของ Pods แต่ละแบบบ้าง ว่าได้ผลอย่างไร
- กำหนดให้แต่ละ Pods ใช้งาน 1 CPU
- กำหนดให้แต่ละ Pods ใช้งาน 2 CPU
- กำหนดให้แต่ละ Pods ใช้งาน 3 CPU
พบว่ายิ่งกำหนดให้ CPU น้อย
และ scale ด้วยการเพิ่ม Pods ไปเรื่อย ๆ ด้วย HPA (Horizontal Pods Autoscalar)
จะมี throughput น้อย และ latency สูงขึ้น !!
ผลที่ได้แสดงดังรูป

สุดท้ายแล้วนั้น ห้ามใช้การเดาหรือความรู้สึก
แต่ต้องทำการวัดผลเสมอ
ว่าสิ่งที่ทำลงไปนั้น มันดีขึ้นหรือแย่ลง
ทั้ง Throughput, Latency และ Footprint เป็นต้น