Laptop ini memiliki SSD dan oleh karena itu saya memutuskan untuk menghilangkan swap. Ini bekerja dengan baik di sebagian besar kasus, tetapi kadang-kadang RAM menjadi agak pendek dan komputer menjadi sangat lamban dan cenderung membeku. Apakah ada cara untuk menerapkan tombol "bunuh proses terbesar" yang langsung menuju kernel jika saya melihat pembekuannya cukup cepat? Atau, karena itu komputer, heuristik ketika mulai membeku dan menembak, proses terbesarnya sendiri juga akan baik-baik saja.
14
overcommit_memory
adalah0
,overcommit_ratio
adalah50
.Jawaban:
Dari komentar Anda, sepertinya sistem baru saja bertukar.
Linux memiliki OOM killer, yang dipanggil ketika sistem memiliki terlalu banyak memori, dan sekarang telah habis.
Linux secara default melakukan memory overcommit, yang pada dasarnya berarti program ini memberikan lebih banyak memori daripada sistem sebenarnya. Ini melakukan ini dengan asumsi bahwa program tidak akan benar-benar menggunakan semua memori yang mereka minta. Namun ketika sistem kehabisan memori, ia sudah memberi tahu berbagai proses yang sedang berjalan bahwa mereka memiliki memori, sehingga tidak bisa hanya menolaknya lagi. Sebaliknya apa yang dilakukannya adalah memanggil pembunuh OOM. Pembunuh OOM pada dasarnya menemukan proses yang menurut kernel akan meringankan kondisi kehabisan memori. Biasanya ini hanya proses menggunakan sebagian besar memori, tetapi algoritma sebenarnya jauh lebih kompleks dari itu.
Karena Anda telah
overcommit_memory
mengatur ke0
(mode otomatis), kernel sedang melakukan overcommit memori. Jadi dari perilaku Anda yang dijelaskan, sepertinya sistem hanya bertukar berat.Dari sini ada 2 opsi.
Kurangi swap
Sistem Anda kehabisan RAM, dan karena itu kernel mulai mendorong hal-hal menjadi swap. Jika sistem Anda kehabisan swap, maka itu memanggil pembunuh OOM. Namun karena Anda masih memiliki ruang swap gratis, ini tidak terjadi.
Ide awal Anda, secara manual mematikan suatu proses.
Anda dapat mematikan proses secara manual ketika Anda berpikir sistem bertukar terlalu banyak dan sesuatu perlu mati. Ini dapat dilakukan melalui pemicu kernel SysRq.
Kernel memiliki apa yang disebutnya "magic SysRq". Ini adalah sedikit fungsionalitas yang memberi tahu kernel untuk melakukan semacam operasi darurat. Ini dapat berupa "remount semua volume read-only", "sync all filesystems", atau "reboot now". Salah satu opsi ini adalah untuk memanggil pembunuh OOM.
Jika kernel Anda mengaktifkan SysRq ajaib (opsi kernel
CONFIG_MAGIC_SYSRQ
), Anda dapat melakukannya dengan 2 cara.Cukup tekan 3 tombol ini di keyboard.
echo f > /proc/sysrq-trigger
Ini akan melakukan tugas yang sama persis seperti metode keyboard, tetapi melakukannya secara terprogram.
Anda juga dapat menonaktifkan swap sepenuhnya, dan inilah yang saya lakukan pada sebagian besar sistem saya, dan untuk alasan yang tepat ini. Swap bermanfaat karena kernel akan terlebih dahulu bertukar data yang tidak digunakan, membiarkan lebih banyak ram Anda digunakan untuk caching. Tapi itu mengarah ke masalah swapping paksa yang Anda lihat.
Saya pribadi berpikir solusi terbaik adalah semacam opsi kernel untuk memanggil pembunuh OOM pada swapping paksa. Pada dasarnya biarkan preemptive swap berfungsi, tetapi jika kernel dipaksa untuk memindahkan sesuatu ke swap karena Anda kehabisan RAM, maka panggil pembunuh OOM.
Sayangnya ini hanya keinginan pribadi saya. Itu tidak melakukan ini.
sumber
top
ataups
perintah dan jika melebihi batas ambang tertentu, mematikan proses itu menggunakankill
perintah.grep -E "oom-killer|Killed process" /var/log/syslog /var/log/syslog.1