นอกเหนือจากคำตอบอื่น ๆ แล้วคุณสามารถกำหนดค่า Linux ให้ต้องสำรองข้อมูลสำหรับหน่วยความจำที่จัดสรรไว้แม้ว่าโปรแกรมจะไม่ใช้ก็ตาม
อย่างไรก็ตามการใช้หน่วยความจำเกินพิกัดและเกรงกลัวฆาตกร OOM ไม่ใช่ส่วนที่จำเป็นของประสบการณ์ Linux อย่างไรก็ตาม เพียงแค่ตั้งค่าพารามิเตอร์ sysctl vm / overcommit_memory ให้เป็น 2 จะปิดการทำงานแบบ overcommit และทำให้ OOM killer ไม่ทำงานตลอดไป ระบบที่ทันสมัยส่วนใหญ่ควรมีพื้นที่ดิสก์เพียงพอที่จะให้ไฟล์ swap ที่เพียงพอสำหรับสถานการณ์ส่วนใหญ่ แทนที่จะพยายามที่จะป้องกันไม่ให้กระบวนการสัตว์เลี้ยงถูกฆ่าเมื่อหน่วยความจำ overcommitted หมดมันอาจจะง่ายขึ้นเพียงเพื่อหลีกเลี่ยงสถานการณ์โดยสิ้นเชิง [ตอบสนองจากนักฆ่า OOM ]
หากโปรแกรมจัดสรรหน่วยความจำเคอร์เนลก็สามารถทำเครื่องหมายสลับหน้าเพิ่มเติมตามที่กำหนด ตัวบ่งชี้นี้ถูกเก็บไว้ในตัวจัดการหน่วยความจำของเคอร์เนลเนื้อที่ดิสก์ที่แท้จริงยังไม่ได้ถูกแตะต้อง จนกว่าจะใช้หน่วยความจำนั้นจะไม่มีการสลับเข้าและออกจริง ๆ หากพวกเขาไม่เคยใช้งานแล้วการแลกเปลี่ยนการใช้จะผันผวนโดยไม่ส่งผลกระทบต่อประสิทธิภาพ
เนื่องจากกระบวนการถูกแสดงด้วยพื้นที่ที่อยู่ของตัวเองหรือ "มุมมอง" (นี่คือการทำงานของการสลับในครั้งแรก) เคอร์เนลจึงมีระยะเวลาที่มากในการจัดการมัน การใช้ตัวอย่างทางแยกจากบทความที่ลิงก์ด้านบนเนื่องจากมีแนวโน้มที่จะมีหน้าหน่วยความจำที่ใช้ร่วมกันมากกว่าที่จะจัดสรรหน่วยความจำที่ไม่ได้ใช้จำนวนมากครั้งใหม่หน่วยความจำสามารถจัดสรรการคัดลอกเมื่อเขียนเพิ่มจำนวนการใช้ swap เมื่อมันถูกเขียนถึง (ซึ่งอาจไม่เกิดขึ้น) จากนั้น "swap swap" สามารถแทนที่ด้วย RAM ที่ไม่ได้ใช้ (จากนั้นเพิ่มการใช้ RAM และลดการใช้ swap) ลองนึกภาพกระบวนการที่มีการจัดสรร 500MB ซึ่ง forks บนเครื่องที่มี RAM ทั้งหมดหรือเกือบทั้งหมดที่ใช้งานอยู่ หากมี swap อยู่ที่ 500MB (และพื้นที่ดิสก์ราคาถูกจะมีขนาดเท่าใด 1% ของไดรฟ์วัณโรคในวันนี้: P) ไม่มีการคัดลอกหน่วยความจำ (ยัง
ดังนั้นความเป็นไปได้ของ OOM killer จึงหลีกเลี่ยงได้และมันง่ายกว่ามากในการออกแบบซอฟต์แวร์ส่วนใหญ่ด้วยการสันนิษฐานว่าการจัดสรรหน่วยความจำ (รวมถึงการจัดสรร "โดยนัย" ผ่านทางส้อม) จะประสบความสำเร็จหรือล้มเหลวทันทีด้วยการใช้งานจริง เปลี่ยนแล้วอาจส่งผลกระทบต่อประสิทธิภาพ ผลกระทบนั้นแทบจะทุกครั้งเล็กน้อย แต่ในกรณีที่เลวร้ายที่สุดจะนำไปสู่การสลับการเฆี่ยน (บางครั้งก็ยังดีกว่าที่จะเกิดข้อผิดพลาดของเคอร์เนลหรือ OOM killer)
แม้ว่าฉันจะไม่ทราบรายละเอียดที่ชัดเจนว่าตัวจัดการหน่วยความจำ Linux ทำงานอย่างไรคำตอบนี้คือความเข้าใจโดยทั่วไปของฉันเองและสิ่งที่ฉันจำได้ในการอ่านในช่วงหลายปีที่ผ่านมา ฉันพยายามที่จะแก้ไขคำตอบนี้ใหม่เพื่อให้มีความเข้าใจน้อยที่สุดเกี่ยวกับการออกแบบระบบปฏิบัติการ (มันค่อนข้างซับซ้อนและไม่ใช่สิ่งที่ฉันสนใจในตัวเองอย่างมาก) แต่ดูเหมือนว่าจะกระแทกนิดหน่อย โปรดแจ้งให้เราทราบหากคุณเห็นว่าสามารถปรับปรุงได้อย่างไร ในมือที่จับอาจไม่ใช่คำถามพื้นฐานที่น่าอาย