OOM killer
OOM (out-of-memory) killer คือส่วนหนึ่งของ Linux kernel ที่จะยุติกระบวนการทำงานเมื่อระบบหน่วยความจำเต็มและไม่สามารถคืนพื้นที่หน่วยความจำได้ โดยจะเลือกกระบวนการจากคะแนน OOM ซึ่งมักจะเป็นกระบวนการที่ใช้หน่วยความจำมากที่สุด บันทึกของ kernel จะบันทึกเหตุการณ์ OOM kill ทุกครั้ง
1วิธีการเลือกกระบวนการที่จะถูกยุติ
แต่ละกระบวนการจะมีคะแนนใน /proc/<pid>/oom_score ซึ่งจะเพิ่มขึ้นตามการใช้หน่วยความจำ โดยสามารถปรับคะแนนได้ผ่าน /proc/<pid>/oom_score_adj ซึ่งมีค่าตั้งแต่ -1000 ถึง 1000 หากตั้งค่าเป็น -1000 กระบวนการนั้นจะไม่ถูกเลือก
2การค้นหาเหตุการณ์ OOM kill
kernel จะเขียนข้อความ 'Out of memory: Killed process' ลงในบันทึกของระบบ คุณสามารถใช้คำสั่ง journalctl -k | grep -i oom หรือ dmesg | grep -i oom เพื่อดูข้อความเหล่านี้ พร้อมทั้งชื่อกระบวนการและปริมาณหน่วยความจำที่ใช้
3การป้องกัน
เพิ่มหน่วยความจำหรือ swap จำกัดการใช้งานของบริการที่ใช้หน่วยความจำสูง หรือกำหนดขีดจำกัดต่อบริการด้วยตัวเลือกของ systemd เช่น MemoryMax= นอกจากนี้ บาง distribution ยังมีการใช้งาน systemd-oomd ซึ่งจะทำงานก่อนหน้านั้นโดยอ้างอิงจากแรงกดดันของหน่วยความจำ
วิธีตรวจสอบเหตุการณ์ OOM kill
- ค้นหาในบันทึกของ kernel:
journalctl -k | grep -i -A5 'out of memory' - จดบันทึกกระบวนการที่ถูกยุติและขนาดหน่วยความจำที่ใช้
- ตรวจสอบหน่วยความจำและ swap ปัจจุบัน:
free -h - ค้นหากระบวนการที่ใช้หน่วยความจำมากที่สุด:
ps aux --sort=-rss | head - เพิ่ม swap หรือจำกัดการใช้งานของบริการ จากนั้นเฝ้าสังเกตว่าเหตุการณ์เกิดขึ้นอีกหรือไม่
ข้อควรระวัง
- การตั้งค่า oom_score_adj เป็น -1000 ให้กับหลายกระบวนการอาจทำให้ kernel ไม่มีตัวเลือกที่ปลอดภัยในการยุติการทำงาน
- การปิดระบบป้องกัน memory overcommit โดยไม่เข้าใจการทำงานอาจทำให้เกิดความล้มเหลวในส่วนอื่นได้
บทความที่เกี่ยวข้อง
- พื้นที่ Swap บน LinuxSwap คืออะไร วิธีตรวจสอบด้วยคำสั่ง free และ swapon วิธีเพิ่มไฟล์ swap และการเปลี่ยนแปลงของ vm.swappiness
- ค่าเฉลี่ยโหลด (Load average)ความหมายของตัวเลขค่าเฉลี่ยโหลดทั้งสามตัว ความสัมพันธ์กับจำนวนคอร์ของ CPU และเมื่อใดที่ค่าโหลดสูงถือเป็นปัญหา
- journalctl และ systemd journalวิธีอ่านบันทึกด้วย journalctl ตรวจสอบพื้นที่ที่ journal ใช้งาน และลดขนาดอย่างปลอดภัยด้วยตัวเลือก --vacuum
แหล่งอ้างอิง
- หน้าคู่มือ proc(5): oom_score และ oom_score_adj man7.org
- การจัดการหน่วยความจำเต็ม (kernel.org) kernel.org
หมายเหตุ: RainServer มีบริการตรวจสอบและทำความสะอาดอย่างปลอดภัยสำหรับ Linux servers โดยจะแสดงรายการสิ่งที่กำลังจะเปลี่ยนแปลงและขออนุญาตก่อนดำเนินการ
ตรวจสอบล่าสุด: