Rain WikiWindows · Linux · Android

OOM killer

แนวคิดทุกดิสทริบิวชัน Linux

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

  1. ค้นหาในบันทึกของ kernel: journalctl -k | grep -i -A5 'out of memory'
  2. จดบันทึกกระบวนการที่ถูกยุติและขนาดหน่วยความจำที่ใช้
  3. ตรวจสอบหน่วยความจำและ swap ปัจจุบัน: free -h
  4. ค้นหากระบวนการที่ใช้หน่วยความจำมากที่สุด: ps aux --sort=-rss | head
  5. เพิ่ม swap หรือจำกัดการใช้งานของบริการ จากนั้นเฝ้าสังเกตว่าเหตุการณ์เกิดขึ้นอีกหรือไม่

ข้อควรระวัง

  • การตั้งค่า oom_score_adj เป็น -1000 ให้กับหลายกระบวนการอาจทำให้ kernel ไม่มีตัวเลือกที่ปลอดภัยในการยุติการทำงาน
  • การปิดระบบป้องกัน memory overcommit โดยไม่เข้าใจการทำงานอาจทำให้เกิดความล้มเหลวในส่วนอื่นได้

แหล่งอ้างอิง

  1. หน้าคู่มือ proc(5): oom_score และ oom_score_adj man7.org
  2. การจัดการหน่วยความจำเต็ม (kernel.org) kernel.org

หมายเหตุ: RainServer มีบริการตรวจสอบและทำความสะอาดอย่างปลอดภัยสำหรับ Linux servers โดยจะแสดงรายการสิ่งที่กำลังจะเปลี่ยนแปลงและขออนุญาตก่อนดำเนินการ

ตรวจสอบล่าสุด: