Bagaimana cara saya memberikan gigi pembunuh OOM lagi?

12

Kembali pada hari saya mengutuk pembunuh-OOM karena terlalu agresif dan membunuh aplikasi yang saya gunakan. Sekarang, ketika saya secara berkala menonton sistem saya rusak selama 15 menit karena beberapa program berperilaku buruk, dan akhirnya beralih ke power-power-off karena tidak akan menanggapi keyboard, saya menyadari bahwa saya melakukannya lebih baik daripada yang saya sadari. saat itu.

Bagaimana cara mengembalikan OOM-killer ke cara yang lama dan haus darah?

Avdi
sumber
1
Lihatlah program-program yang menyebabkan masalah, dan batasi jumlah memori yang dapat mereka hisaplimits.conf
LawrenceC

Jawaban:

4

Saya akan mengurangi jumlah ruang swap yang Anda miliki. Instalasi yang umum hari ini berupaya mengalokasikan swap sebanyak yang ada memori fisik (atau kadang-kadang dua kali lebih banyak). Masalah dengan hal ini adalah bahwa ketika sesuatu berjalan serba salah, sistem masuk ke dalam kematian-spiral mencoba untuk "mengocok" hal-hal dari memori ke disk, dan kembali, dan mulai melakukan begitu banyak yang tidak punya waktu untuk merespon untuk input pengguna.

Pada hari-hari baik, seluruh proses ditukar ke disk (dan kembali), maka swap besar diperlukan.

Dalam sistem memori virtual modern, memori ditukar dalam blok (bukan seluruh proses), sehingga Anda bisa bertahan dengan swap yang lebih kecil. Dalam skenario Anda, Anda sebaiknya mematikan proses, jadi menjalankan dengan swap yang lebih kecil akan menyebabkan OOM untuk memulai proses pembunuhan lebih cepat (daripada membuat sistem menghabiskan banyak waktu untuk menukar barang ke / dari disk).

Brian Stevens
sumber
Saya memiliki nol swap, dan sistem saya terkunci selama 20+ menit ketika saya memiliki loop javascript yang tak terbatas dalam kromium daripada mendorong ke array atau sesuatu. Saya perlu OOMK untuk memicu sebelum sistem saya tidak berguna, bukan cara setelahnya.
JasonWoof
0

Inilah yang bekerja untuk saya:

echo 1 > /proc/sys/vm/oom_kill_allocating_task

Itu hanya untuk boot ini. Anda dapat menguji dengan menjalankan yang berikut ini di tab konsol inspektur browser Anda:

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

Jika Anda senang dengan pengaturan ini, Anda dapat menjadikan default untuk semua boot berikutnya:

echo "vm.oom_kill_allocating_task=1" >> /etc/sysctl.conf
JasonWoof
sumber