ข้อความ Out of Memory คืออะไร: เสียสละเด็ก?


20

เมื่อเร็ว ๆ นี้คอมพิวเตอร์ของฉันมีหน่วยความจำไม่เพียงพอ (เป็นผลมาจากการรวบรวมซอฟต์แวร์ในขณะที่ทำงานกับชุดข้อมูล GIS ขนาดใหญ่) ในบันทึกระบบรายละเอียดวิธีจัดการกับเงื่อนไข OOM เป็นบรรทัดต่อไปนี้:

Out of memory: Kill process 7429 (java) score 259 or sacrifice child

นั่นคือสิ่งที่or sacrifice childเกี่ยวกับ? แน่นอนมันไม่ได้ไตร่ตรองพิธีกรรมที่มืดเพื่อให้สิ่งต่าง ๆ ดำเนินต่อไป?

คำตอบ:


8

จากซอร์สไฟล์ฉันพบoom_kill.c , OOM Killer หลังจากข้อความดังกล่าวถูกเขียนในบันทึกของระบบตรวจสอบลูกของกระบวนการที่ระบุและประเมินว่าเป็นไปได้ที่จะฆ่าหนึ่งในนั้นแทนกระบวนการเอง

นี่คือความคิดเห็นที่ดึงมาจากไฟล์ต้นฉบับอธิบาย:

/*
 * If any of p's children has a different mm and is eligible for kill,
 * the one with the highest oom_badness() score is sacrificed for its
 * parent.  This attempts to lose the minimal amount of work done while
 * still freeing memory.
 */

นอกจากนี้ยังใช้สำหรับ Firefox (เนื้อหาเว็บ)
neverMind9

2

มันกำลังพูดถึงการฆ่ากระบวนการลูกของกระบวนการที่เสนอชื่อเพื่อส่งKILLสัญญาณ


2
แต่มันหมายความว่าอะไร? มีวิธีการที่ผู้ปกครองสามารถ "เสียสละ" เด็กเพื่อช่วยตัวเอง?
Thanatos

การเดาของฉันซึ่งเป็นเพียงการเดาก็คือเนื่องจากกระบวนการทั้งหมดเป็นลูกหลานของกระบวนการเริ่มต้นของ Linux ที่ผู้ปกครองในบริบทนี้เป็นกระบวนการ Linux ที่เด็ก ๆ เป็นแอปพลิเคชันต่าง ๆ ในกรณีนี้กระบวนการลีนุกซ์กำลังช่วยตัวเองโดยการฆ่าลูก ๆ คนหนึ่ง
เชมัส

0

นี่คือนักฆ่า Oom (หน่วยความจำไม่เพียงพอ) เมื่อระบบของคุณไม่มีหน่วยความจำเคอร์เนล linux จะฆ่ากระบวนการเพื่อเพิ่มหน่วยความจำ ฮิวริสติกกำหนดว่ากระบวนการใดเป็นตัวเลือกที่ดีที่สุดในการรับหน่วยความจำที่เป็นอิสระโดยไม่ทำลายระบบ

รายละเอียดเพิ่มเติมที่นี่: OOM killer ตัดสินใจว่ากระบวนการใดจะฆ่าเป็นอันดับแรก


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