Di mesin Debian VM saya dengan RAM 512 MB dan swap 348 MB, apa yang akan terjadi jika saya membuka file 1 GB di editor dan keluar dari memori?
Apakah akan merusak sistem? Atau jika tidak, bagaimana Linux akan menangani ini?
Bukankah lebih bijaksana untuk menginstal Swapspace jadi jika diperlukan di sana akan dibuat cukup swap secara otomatis dan dinamis?
sudo apt-get install swapspace
memory
swap
out-of-memory
rubo77
sumber
sumber
Jawaban:
Itu tergantung pada pengaturan yang Anda jalankan, dalam overcommit memori tertentu (
/proc/sys/vm/overcommit_memory
; lihatman 5 proc
detailnya).Jika memory overcommit dinonaktifkan, editor (dan mungkin program lain yang mencoba pada saat yang bersamaan) berupaya mengalokasikan memori akan gagal. Mereka akan mendapatkan hasil kegagalan dari panggilan sistem. Terserah masing-masing program untuk menangani ini, meskipun sayangnya hasil yang umum adalah untuk crash. Editor juga dapat, misalnya, menolak untuk membuka file.
Jika memory overcommit diaktifkan, maka panggilan sistem yang meminta memori mungkin berhasil. Dalam hal ini, ketika memori benar-benar diakses, kernel akan melihat kehabisan memori, dan mematikan proses untuk merebut kembali memori. Proses itu mungkin atau mungkin bukan editor. Pilihannya diatur oleh
oom_score
(hasil dari beberapa heuristik kernel) danoom_score_adj
(dikonfigurasi) dari setiap proses pada sistem. Itu juga ada di halaman proc (5) itu.sumber
Ada masalah besar di Linux dalam hal ini jika Anda mendekati kondisi kehabisan memori - Anda akan melihat bahwa seluruh sistem Anda menjadi benar-benar tidak responsif karena mulai banyak bertukar. Bahkan kursor mouse Anda mungkin menjadi sangat 'lambat' sehingga Anda tidak dapat memulai terminal dan mematikan proses pemakan memori yang menyinggung secara manual. Ini karena sejumlah besar operasi disk.
Untuk menghindari situasi ini, saya pribadi biasanya menonaktifkan swap sepenuhnya, sehingga kernel Linux selalu responsif dan dalam kasus terburuk pembunuh kehabisan memori (OOM) akan mematikan beberapa proses. Logika yang prosesnya dimatikan oleh OOM tergantung pada versi kernel.
Jadi jawabannya tidak - jangan aktifkan alokasi swap dinamis. Anda akan menghadapi hang mesin.
Sangat mudah untuk mencobanya dengan program yang secara konstan mengalokasikan sebagian memori dalam satu lingkaran. Simpan program ini ke file teks,
memeater.c
:Kemudian kompilasi:
dan lari:
Cobalah dengan swap, tanpa swap, dan dengan alokasi swap dinamis Anda.
Juga, perlu diingat bahwa dalam kebanyakan kasus kondisi OOM ini terjadi karena bug dalam perangkat lunak (kebocoran memori) atau Anda melakukan sesuatu yang salah seperti 'memuat file 10 GB ini di editor' atau 'menjalankan terlalu banyak ukuran file grafis secara paralel' dan lakukan kesimpulannya: Apakah Anda perlu swap atau tidak?
sumber