ฉันจะให้ฟันฆาตกรของ OOM ได้อีกครั้งได้อย่างไร


12

ย้อนกลับไปในวันที่ฉันเคยสาปแช่ง OOM-killer สำหรับแอพที่ดุเดือดและฆ่าแอพที่ฉันใช้ ตอนนี้เมื่อฉันดู thrash ระบบของฉันเป็นระยะเวลา 15 นาทีเนื่องจากโปรแกรมที่ประพฤติผิดและในที่สุดก็หันไปใช้กำลังไฟเพราะมันไม่ตอบสนองต่อคีย์บอร์ดฉันรู้ว่าฉันทำได้ดีกว่าที่ฉันรู้ ณ ตอนนั้น.

ฉันจะคืนค่า OOM-killer เป็นวิธีเก่าแก่และกระหายเลือดได้อย่างไร


1
ดูโปรแกรมที่ก่อให้เกิดปัญหาและ จำกัด จำนวนหน่วยความจำที่พวกเขาสามารถดูดได้ด้วยlimits.conf
LawrenceC

คำตอบ:


4

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

ในช่วงวันที่ดีกระบวนการทั้งหมดได้ถูกสลับไปยังดิสก์ (และด้านหลัง) ดังนั้นจึงจำเป็นต้องมีการแลกเปลี่ยนจำนวนมาก

ในระบบหน่วยความจำเสมือนที่ทันสมัยหน่วยความจำจะถูกสลับเป็นบล็อก (แทนที่จะเป็นกระบวนการทั้งหมด) ดังนั้นคุณจะได้รับการแลกเปลี่ยนที่น้อยลง ในสถานการณ์ของคุณคุณควรจะดีกว่าที่กระบวนการถูกฆ่าดังนั้นการรันด้วย swap ที่น้อยกว่าจะทำให้ OOM เริ่มต้นการฆ่ากระบวนการเร็วกว่า


ฉันไม่มีการแลกเปลี่ยนเป็นศูนย์และระบบของฉันจะล็อคเป็นเวลา 20+ นาทีเมื่อฉันมีจาวาสคริปต์วนซ้ำในโครเมียมมากกว่าดันไปยังอาร์เรย์หรืออะไรบางอย่าง ฉันจำเป็นต้องเรียกใช้ OOMK ก่อนที่ระบบของฉันจะไร้ประโยชน์ไม่ใช่หลังจากนั้น
JasonWoof

0

นี่คือสิ่งที่ใช้ได้กับฉัน:

echo 1 > /proc/sys/vm/oom_kill_allocating_task

นั่นเป็นเพียงบูตนี้ คุณสามารถทดสอบโดยเรียกใช้สิ่งต่อไปนี้ในแท็บคอนโซลของตัวตรวจสอบเบราว์เซอร์ของคุณ:

a = []; while (true) { a.push(1); }

หากคุณพอใจกับการตั้งค่านี้คุณสามารถกำหนดเป็นค่าเริ่มต้นสำหรับรองเท้าบู๊ตในอนาคตทั้งหมดได้:

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