รับดัมพ์หลักของ / การดีบักกระบวนการที่ oom-killer ฆ่า


10

มีวิธีใดที่จะได้รับดัมพ์หลักหรือสามารถดีบักกระบวนการที่ถูกฆ่าโดย oom-killer ได้หรือไม่?

หรือแม้แต่ตั้งค่า oom-killer ให้พยายามฆ่ากระบวนการโดยใช้ ABRT แทน?

คำตอบ:


5

อีกวิธีหนึ่งคือการปิดใช้งานการทับหน่วยความจำมากเกินไป

ในการกู้คืนสติปัญญาบางส่วนให้กลับสู่การจัดการหน่วยความจำของคุณ:

  1. ปิดการใช้งาน OOM Killer (ใส่vm.oom-kill = 0/etc/sysctl.conf)
  2. ปิดการใช้งานหน่วยความจำ overcommit (ใส่vm.overcommit_memory = 2ใน/etc/sysctl.conf)

การตั้งค่าเหล่านี้จะทำให้ Linux ทำงานในลักษณะดั้งเดิม (หากกระบวนการร้องขอหน่วยความจำมากกว่าที่มีอยู่malloc()จะล้มเหลวและกระบวนการที่ขอหน่วยความจำคาดว่าจะรับมือกับความล้มเหลวนั้น)

โปรดทราบว่านี่เป็นค่าที่ประกอบไปด้วย:
  • 0 = "ประเมินถ้าเรามีแรมเพียงพอ"
  • 1 = "พูดว่าใช่เสมอ"
  • 2 = "ปฏิเสธเมื่อไม่มีหน่วยความจำ"

สิ่งนี้จะบังคับให้แอปพลิเคชันจัดการกับหน่วยความจำไม่เพียงพอและอาจเป็นไปได้ว่าล็อก / coredump / ฯลฯ อาจให้สิ่งที่มีประโยชน์แก่คุณ

อัปเดต # 1

หมายเหตุ:เมื่อระบบของคุณไม่มีหน่วยความจำคุณจะไม่สามารถวางกระบวนการใหม่ได้! คุณอาจถูกล็อคออกจากระบบ


นี่เป็นความคิดที่แย่มาก ซอฟต์แวร์ส่วนใหญ่ที่ทำงานบนระบบของคุณอาจไม่จัดการกับค่าส่งคืนจากความล้มเหลวในการจัดสรรหน่วยความจำอย่างถูกต้อง การทำเช่นนี้จะทำให้รหัสเส้นทางที่ทุกคนไม่เคยถูกเรียกใช้เพื่อดำเนินการและในกรณีที่เลวร้ายที่สุดอาจทำให้เกิดช่องโหว่ด้านความปลอดภัยบนระบบของคุณจากการเรียกใช้เส้นทางรหัสที่ไม่ผ่านการทดสอบและไม่คาดคิดเหล่านี้
KJ Tsanaktsidis

4
echo 1 > /proc/sys/vm/oom_dump_tasks

ซึ่งดูเหมือนเกี่ยวกับจำนวนสูงสุดที่คุณสามารถรับเคอร์เนลเพื่อแสดงข้อผิดพลาดออกจากหน่วยความจำ

https://www.kernel.org/doc/Documentation/sysctl/vm.txt

เปิดใช้งานดัมพ์ภารกิจทั่วทั้งระบบ (ไม่รวมเธรดเคอร์เนล) ที่จะสร้างขึ้นเมื่อเคอร์เนลทำการฆ่า OOM และรวมข้อมูลเช่น pid, uid, tgid, ขนาด vm, rss, nr_ptes, swapents, คะแนน oom_score_adj และชื่อ สิ่งนี้มีประโยชน์ในการพิจารณาว่าเหตุใดนักฆ่า OOM จึงถูกเรียกใช้เพื่อระบุภารกิจการหลอกลวงที่ทำให้เกิดและเพื่อพิจารณาว่าเหตุใดนักฆ่า OOM จึงเลือกงานที่ทำเพื่อฆ่า

หากตั้งค่าเป็นศูนย์ข้อมูลนี้จะถูกระงับ ในระบบที่มีขนาดใหญ่มากซึ่งมีงานหลายพันงานอาจไม่สามารถถ่ายโอนข้อมูลสถานะหน่วยความจำสำหรับแต่ละระบบได้ ระบบดังกล่าวไม่ควรถูกบังคับให้รับบทลงโทษด้านประสิทธิภาพในเงื่อนไขของ OOM เมื่อไม่ต้องการข้อมูล

หากตั้งค่าเป็นไม่เป็นศูนย์ข้อมูลนี้จะปรากฏขึ้นทุกครั้งที่นักฆ่า OOM ฆ่างานหน่วยความจำ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.