Saya mencoba untuk men-tweak sistem pengembangan saya untuk keandalan maksimal. Saya menonaktifkan swap, karena untuk penggunaan GUI sebagian besar membuat mesin tidak responsif sehingga tidak bisa digunakan lagi. Namun demikian, jika aplikasi yang agresif memakan memori, beberapa mekanisme tampaknya menghasilkan yang maksimal dari biaya kecepatan. Tidak ada operasi swap harddisk, tetapi sistemnya juga tidak responsif. Jadi saya ingin membiarkan pembunuh OOM menendang sebelum sistem melakukan upaya khusus untuk mendapatkan memori. Apakah mungkin untuk mengkonfigurasi pembunuh OOM untuk bertindak jika ada kurang dari 100 MB memori fisik misalnya?
linux-kernel
memory-management
dronus
sumber
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
earlyoom
sekarang, itu baik dalam tes pemicu pertama. Saya hanya ingin tahu mengapa ini tidak dapat diimplementasikan oleh konfigurasi kernel atau alat sistem.Kebijakan default kernel adalah mengizinkan aplikasi untuk tetap mengalokasikan memori virtual selama ada memori fisik yang kosong. Memori fisik tidak benar-benar digunakan sampai aplikasi menyentuh memori virtual yang mereka alokasikan, sehingga aplikasi dapat mengalokasikan lebih banyak memori daripada yang dimiliki sistem, kemudian mulai menyentuhnya nanti, menyebabkan kernel kehabisan memori, dan memicu keluar pembunuh memori (OOM). Sebelum proses hogging dimatikan, ia telah menyebabkan cache disk dikosongkan, yang membuat sistem lambat merespons untuk sementara waktu hingga cache diisi ulang.
Anda dapat mengubah kebijakan default untuk melarang overcommit memori dengan menulis nilai 2 menjadi
/proc/sys/vm/overcommit_memory
. Nilai defaultnya/proc/sys/vm/overcommit_ratio
adalah 50, sehingga kernel tidak akan mengizinkan aplikasi untuk mengalokasikan lebih dari 50% ram + swap. Jika Anda tidak memiliki swap, maka kernel tidak akan mengizinkan aplikasi untuk mengalokasikan lebih dari 50% dari ram Anda, meninggalkan 50% lainnya gratis untuk cache. Itu mungkin sedikit berlebihan, jadi Anda mungkin ingin meningkatkan nilai ini untuk mengatakan, 85% atau lebih, sehingga aplikasi dapat mengalokasikan hingga 85% dari ram Anda, menyisakan 15% untuk cache.sumber
I disabled swap, because for GUI usage it mostly renders the machine unresponsive in such a way not useable anymore.
. Dia menyebutkan GUI, sementara Anda mengasumsikan dia menjalankan perintah. Membeli lebih banyak memori adalah solusi pertama, menggunakan lebih sedikit memori sendiri adalah solusi kedua, membuat sistem Anda tidak stabil dengan mengutak-atik standar stabil adalah solusi terakhir. Pertanyaannya tidak harus dijawab secara harfiah, jadi saya tidak melihat apa masalah Anda sehingga Anda harus mengganggu kami berdua di komentar. Kata-kata kasar tidak membantu .../proc/meminfo
' sCommitted_AS
negara. Dengan beberapa aplikasi berjalan, nilai ini dengan mudah melebihi memori fisik sehingga sulit untuk menetapkan batas yang masuk akal dengan ini.Bagi saya pengaturan vm.admin_reserve_kbytes = 262144 melakukan hal ini. OOM killer mengintervensi sebelum sistem benar-benar tidak responsif.
sumber
Jawaban lain memiliki solusi otomatis yang baik, tetapi saya merasa dapat membantu juga mengaktifkan
SysRq
kunci ketika hal-hal keluar dari tangan. DenganSysRq
kuncinya, Anda akan mengirim pesan ke kernel secara manual, dan Anda dapat melakukan hal-hal seperti reboot yang aman (denganSysRQ + REISUB
) bahkan jika userspace telah benar-benar beku.Untuk memungkinkan kernel mendengarkan permintaan, setel
kernel.sysrq = 1
, atau aktifkan fungsi yang mungkin Anda gunakan dengan bitmask (didokumentasikan di sini ). Misalnyakernel.sysrq = 244
akan mengaktifkan semua kombo yang diperlukan untuk boot ulang yang aman di atas serta permintaan manual dari pembunuh OOMSysRq + F
.sumber
Keandalan tidak tercapai oleh kondisi memori rendah dan pembunuh OOM.
Adalah salah untuk mengatur pesta di lemari dan menempatkan "membersihkan lemari saya" di daftar putar kecil Anda.
Melakukan ini akan memiliki hasil samping yang tidak diinginkan, karena Anda tidak memiliki kendali atas apa yang terbunuh.
Keandalan maksimal melibatkan pengujian sistem Anda dan peningkatan sistem Anda berdasarkan tes-tes ini.
Hanya mengutak - atik hal-hal acak tidak akan membawa Anda ke mana pun ...
Karena kondisi memori yang rendah, menonaktifkan swap tidak akan meningkatkan perilaku , itu sebaliknya .
Untuk meningkatkan keandalan dalam situasi ini, tambahkan lebih banyak memori sehingga sistem Anda lebih responsif dan tidak ada proses acak yang dimatikan tanpa niat pengguna. Anda seharusnya tidak menggunakan kondisi dengan memori rendah dan mekanisme seperti ini, terutama di lingkungan pengembangan ...
Kondisi memori yang rendah memang mengakibatkan tidak ada respons, apakah Anda memiliki swap atau tidak.
Upaya khusus yang akan melakukan lebih banyak kerusakan daripada kebaikan, seperti yang saya jelaskan di atas. Sebagai gantinya, Anda dapat membunuh proses yang tidak Anda butuhkan sendiri, tetapi saya kira Anda tidak dapat melakukannya sehingga OOM akan membunuh proses yang Anda butuhkan.
Mungkin, tetapi Anda mendapatkan pengembalian investasi yang lebih tinggi jika Anda hanya membeli beberapa memori tambahan yang tidak terlalu mahal akhir-akhir ini. Pertimbangkan bahwa Anda akan memukul diri sendiri dalam jangka panjang jika Anda terus bekerja pada kondisi memori rendah. OOM seperti juru sita, itu tidak membantu Anda, itu membantu OS ...
sumber
kill
secara acak.