Apakah mungkin untuk membuat sistem terlebih dahulu bertukar keluar halaman tidak aktif ( vm.swappiness
), tetapi memanggil oom-killer ketika sistem kehabisan RAM (sebagai lawan kehabisan memori) dan dipaksa untuk bertukar?
Tujuan utamanya adalah menjaga agar sistem tidak menggiling hingga berhenti ketika mulai meronta-ronta disk karena kesalahan halaman utama, tetapi masih membiarkan halaman tidak aktif diganti.
Keinginan lain adalah untuk mengkonfigurasi berapa banyak swap memori sistem dipaksa untuk digunakan sebelum pemicu oom-killer. Dengan cara ini sistem dapat beralih ke swap sedikit saja, asalkan tidak terlalu jauh. Atau saya bisa mengatur ambang batas untuk memicu oom-killer sebelum menggunakan semua RAM sehingga selalu ada ruang untuk cache sistem file (dan dengan demikian menghindari lebih banyak disk drive).
Sepertinya ini tidak terlalu sulit untuk dilakukan. Sepertinya Anda bisa memberi tahu oom-killer untuk memicu ketika sistem memiliki X ram digunakan / gratis. Tetapi inilah mengapa saya bertanya; Saya tidak tahu
Untuk klarifikasi, saya tidak ingin mematikan swap, atau menyesuaikan vm.swappiness
parameter
sumber
Jawaban:
Saya juga berjuang dengan masalah itu. Saya hanya ingin sistem saya tetap responsif, apa pun yang terjadi, dan saya lebih suka kehilangan proses daripada menunggu beberapa menit. Sepertinya tidak ada cara untuk mencapai hal ini menggunakan kernel oom killer.
Namun, di ruang pengguna, kami dapat melakukan apa pun yang kami inginkan. Jadi saya menulis Early OOM Daemon ( https://github.com/rfjakob/earlyoom ) yang akan mematikan proses terbesar (dengan RSS) setelah RAM yang tersedia berjalan di bawah 10%.
Tanpa awal, mudah untuk mengunci mesin saya (RAM 8GB) dengan memulai http://www.unrealengine.com/html5/ beberapa kali. Sekarang, tab browser yang bersalah terbunuh sebelum hal-hal tidak terkendali.
sumber
column -t -s,
pada beberapa file csv besar dan biarkanearlyoom
membunuhnya ketika itu tidak mungkin, sebelum melihat ada yang tidak responsif.Ini terdengar seperti solusi yang terlalu rumit. Saya akan menyarankan (dan saya melakukan ini pada mesin saya setup yang tidak perlu hibernasi) hanya mengalokasikan sejumlah kecil ruang swap (128-256MiB). Dengan cara ini kernel dapat menukar beberapa halaman, tetapi pembunuh-OOM dipanggil sebelum hal-hal menjadi buruk.
Jika Anda benar-benar ingin melakukan ini, saya pikir Anda harus menulis skrip / program Anda sendiri yang memantau penggunaan swap dan memanggil pembunuh-OOM menggunakan kunci Magic SysReq (yang dapat dilakukan secara terprogram dengan menulis ke
/proc/sysrq-trigger
).sumber
vm.swappiness
, dan swapping paksa karena kehabisan ram. Yang perlu terjadi adalah ketika kernel dipaksa untuk bertukar, untuk memicu oom-killer. Dan 10GB juga menyisakan banyak ruang untuk bertukar paksa untuk meronta-ronta disk.