รับสัญญาณก่อนที่กระบวนการจะถูกฆ่าโดย OOM killer / cgroups


11

ในกลุ่มของเราเรากำลัง จำกัด ทรัพยากรกระบวนการของเราเช่นหน่วยความจำ ( memory.limit_in_bytes)

ฉันคิดว่าในท้ายที่สุดแล้วมันก็จัดการผ่าน OOM killer ในเคอร์เนลลินุกซ์ (ดูเหมือนว่าโดยการอ่านซอร์สโค้ด )

มีวิธีรับสัญญาณก่อนที่กระบวนการของฉันจะถูกฆ่าหรือไม่? (เช่นเดียวกับ-notifyตัวเลือกสำหรับSGEqsubซึ่งจะส่งSIGUSR1ก่อนที่กระบวนการจะถูกฆ่า)

ฉันอ่านเกี่ยวกับ/dev/mem_notify ที่นี่แต่ฉันไม่มี - ทุกวันนี้มีอย่างอื่นอีกไหม? ฉันอ่านสิ่งนี้ซึ่งดูเหมือนว่าจะค่อนข้างเกี่ยวข้อง

ฉันต้องการอย่างน้อยก็ทิ้งร่องรอยกองเล็ก ๆ และบางทีข้อมูลการแก้ปัญหาที่มีประโยชน์อื่น ๆ - แต่บางทีฉันสามารถกู้คืนได้โดยการเพิ่มหน่วยความจำ

หนึ่งแก้ปัญหาฉันกำลังใช้อยู่นี้สคริปต์เล็ก ๆซึ่งการตรวจสอบบ่อยถ้าผมสนิท (95%) เพื่อขีด จำกัด SIGUSR1และถ้าเป็นเช่นนั้นก็จะส่งกระบวนการ ใน Bash ฉันกำลังเริ่มต้นสคริปต์นี้ในพื้นหลัง ( cgroup-mem-limit-watcher.py &) เพื่อที่จะคอยดู procs อื่น ๆ ใน cgroup เดียวกันและจะหยุดทำงานโดยอัตโนมัติเมื่อกระบวนการ Bash หลักตาย


ฉันไม่พบแหล่งอำนาจใด ๆ และฉันไม่สามารถหาวิธีเรียก OOM killer สำหรับกระบวนการเฉพาะด้วยตนเอง(เพื่อทดสอบแนวคิด)แต่จากสิ่งที่ฉันพบดูเหมือนว่า OOM killer ส่ง SIGTERM เพียงคุณต้องตั้งค่า ตัวจัดการสัญญาณนี้
Hi-Angel

5
@ Hi-Angel: จากซอร์สโค้ด Linuxดูเหมือนว่าจะส่ง SIGKILL
อัลเบิร์ต

@Albert หลังจากอ่านซอร์สโค้ดฉันก็คิดว่า OOM Killer จะส่งสัญญาณ SIGKILL โดยตรง
แอนดี้

คำตอบ:


5

เป็นไปได้ที่จะลงทะเบียนสำหรับการแจ้งเตือนเมื่อการใช้หน่วยความจำของ cgroup สูงกว่าเกณฑ์ โดยหลักการแล้วการตั้งค่าขีด จำกัด ที่จุดที่เหมาะสมต่ำกว่าขีด จำกัด จริงจะช่วยให้คุณส่งสัญญาณหรือดำเนินการอื่น ๆ

ดู:

https://www.kernel.org/doc/Documentation/cgroup-v1/memory.txt


5

นักฆ่า OOM ส่ง SIGKILL ไม่เช่นนั้นจะเป็นการต่อต้านการผลิตเพื่อให้โปรแกรมที่มีปัญหาเลือกได้อย่างต่อเนื่อง

นี่หมายความว่าไม่มีวิธีใดที่กระบวนการจะรู้ได้เมื่อมันกำลังจะถูกฆ่าโดยกระบวนการ

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

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