Saya mendapatkan eeePC 900a: ia memiliki flash 8GB sebagai disk dan hanya 1GB RAM. Distribusi Linux yang diinstal di sana adalah ArchLinux.
Ketika sistem kehabisan memori, itu menjadi sangat tidak responsif: dibutuhkan beberapa detik / menit untuk melakukan hal-hal seperti beralih ke TTY1 atau bahkan memindahkan pointer mouse. Kadang-kadang sepertinya sistem hanya membeku: tiga milik kita yang lalu saya biarkan sendiri dan tidak ada yang berubah sejauh ini.
Saya lebih suka menghindari membuat partisi swap / file pada eeePC ini karena disk sudah sekecil itu, dan juga karena banyak menulis di ruang swap akan mempersingkat masa pakai kartu flash. Selain itu saya pikir file swap / partisi hanya akan memindahkan masalah, daripada pasti memperbaikinya.
Bukankah kernel seharusnya mematikan beberapa aplikasi acak ketika kehabisan memori? Mengapa gagal (atau butuh waktu lama) dalam melakukan itu?
Beberapa bulan / tahun yang lalu saya sudah mencoba untuk melihat lebih jauh ke dalam ini, tetapi tidak dapat menemukan apa pun yang benar-benar berfungsi ...
while(true){ if( $FREE_MEMORY<10MB ){ kill -9 $RANDOM_PID; } }
. Ini pasti akan memperbaiki masalah saya. Tapi tunggu, bukankah seharusnya kernel melakukan itu (dan jauh lebih baik daripada skrip saya)? Mengapa tidak melakukan tugasnya?Jawaban:
Dimungkinkan untuk memanggil OOM-killer (kehabisan memori killer) secara langsung dengan kombinasi keyboard:
SysRq-F
Kunci SysRq biasanya digabungkan dengan kunci PrtSc pada keyboard.
OOM-killer membunuh beberapa proses (-es) dan sistem menjadi responsif lagi.
Terima kasih untuk saran tentang fitur ini dalam komentar di atas.
PS: Ini banyak membantu saya. Saya setuju dengan pendapat bahwa ini adalah saran paling berguna tentang masalah itu jika disebabkan oleh Chrome atau perangkat lunak apa pun yang serakah memori. Tetapi Anda perlu diingat bahwa pembunuh OOM dapat membunuh beberapa proses yang sangat penting, gunakan dengan hati-hati.
sumber
PrtScn|SysRq
. Tapi menekanSysRq - F
hanya mendapat tangkapan layarKeadaan alami dari hal-hal ini adalah bahwa data aplikasi ada dalam RAM, dan file ada di disk.
Keadaan ideal, dari segi kinerja, adalah data yang sering digunakan adalah RAM, dan data yang tidak diperlukan saat ini ada di disk.
Pada sistem normal, kernel melakukan dua hal untuk mencoba mencapai ideal ini:
Pada sistem tipikal, sebagian besar RAM dikhususkan untuk cache dan buffer (50% adalah angka tipikal). Karena RAM adalah sumber daya yang terbatas, ini mungkin memerlukan pemindahan beberapa data aplikasi untuk swap (swap hanya diperlukan jika ada cara yang lebih baik untuk menggunakan RAM).
Pada sistem tanpa swap, ada titik di mana data aplikasi menggunakan hampir semua RAM, sehingga hampir tidak ada ruang tersisa untuk cache. Maka sistem cenderung lambat. Kernel tidak akan mulai mematikan aplikasi sampai benar-benar harus. Selama aplikasi hanya mengisi 99% dari memori yang tersedia, sistem terus berjalan, tetapi sangat lambat karena file data harus dimuat dan dimuat ulang dari disk sepanjang waktu. Dengan aplikasi yang sama berjalan, sistem akan lebih cepat dengan swap pada saat itu.
Untuk lebih lanjut tentang masalah ini, lihat diskusi lkml ini dan posting blog ini .
Saya tidak tahu cara langsung memberitahu kernel untuk memesan jumlah minimum RAM untuk cache disk. Anda dapat mengatur sebagian kecil RAM Anda sebagai ruang swap , bahkan mungkin dikompresi . Ada laporan sukses di bagian depan itu , meskipun saya tidak membuat jaminan dalam kasus khusus Anda.
sumber
ld
, Anda sampah), itu masih hang selama hampir satu menit, bangun cukup hanya untuk membiarkan saya memindahkan mouse yang sangat lamban untuk sesaat atau dua setiap beberapa detik. Penanganan OOM Linux adalah omong kosong. Jika saya beruntung, pembunuh OOM membunuh proses yang benar tanpa mengacaukan lingkungan desktop sepenuhnya. Dan saya penggemar Linux. Ini jauh lebih buruk dengan paging diaktifkan. Paging Linux adalah lelucon.Ini adalah bug yang dikenal sejak 2007 - lihat Pembekuan sistem pada penggunaan memori tinggi .
Dalam situasi ini, Windows menampilkan dialog yang memperingatkan pengguna untuk menutup satu atau lebih aplikasi.
sumber
Baru-baru ini saya menemukan solusi untuk masalah saya.
Karena Linux OOM killer tidak dapat melakukan tugasnya dengan baik, saya mulai menggunakan OOM Killer userspace: earlyoom . Ini ditulis dalam C, cukup dapat dikonfigurasi dan berfungsi seperti pesona bagi saya.
Saya juga mendengar tentang beberapa alternatif, seperti OOMD Facebook , yang dikembangkan untuk berjalan di server mereka, tetapi saya belum mencoba yang ini
sumber