Solusi 1:
Overcommit memori dapat dinonaktifkan oleh vm.overcommit_memory=2
0 adalah mode default, di mana kernel secara heuristik menentukan alokasi dengan menghitung memori bebas dibandingkan dengan permintaan alokasi yang dibuat. Dan menyetelnya ke 1 mengaktifkan mode sihir, di mana kernel selalu mengiklankan bahwa ia memiliki memori bebas yang cukup untuk alokasi apa pun. Mengatur ke 2, berarti bahwa proses hanya dapat mengalokasikan hingga jumlah yang dapat dikonfigurasi (overcommit_ratio
) dari RAM dan akan mulai mendapatkan kegagalan alokasi atau pesan OOM saat melampaui jumlah tersebut.
Apakah aman untuk melakukannya, tidak. Saya belum melihat kasus penggunaan yang tepat di mana menonaktifkan overcommit memori benar-benar membantu, kecuali jika Anda 100% yakin dengan beban kerja dan kapasitas perangkat keras. Jika Anda tertarik, instal kernel-docs
paket dan pergi ke /Documentation/sysctl/vm.txt
untuk membaca lebih lanjut, atau membacanya secara online.
Jika Anda menyetel vm.overcommit_memory=2
maka itu akan melakukan overcommit hingga persentase RAM fisik yang dikonfigurasi di vm.overcommit_ratio
(standarnya adalah 50%).
echo 0/1/2 > /proc/sys/vm/overcommit_memory
Ini tidak akan selamat dari reboot. Untuk kegigihan, letakkan ini di /etc/sysctl.conf
berkas:
vm.overcommit_memory=X
dan jalankan sysctl -p
. Tidak perlu memulai ulang.
Solusi 2:
Pernyataan yang benar-benar tidak memenuhi syarat:Menonaktifkan overcommit memori jelas "lebih aman" daripada mengaktifkannya.
$customer telah menyetelnya di beberapa ratus server web dan ini sangat membantu mengatasi masalah stabilitas. Bahkan ada cek Nagios yang mengeluarkan suara sangat keras jika TIDAK pernah dinonaktifkan.
Di sisi lain, orang mungkin tidak menganggap "aman" membuat proses mereka keluar dari memori ketika mereka hanya ingin melakukan terlalu banyak ram kecil dan tidak akan pernah benar-benar menggunakannya. (yaitu SAP akan menjadi contoh yang sangat bagus)
Jadi, Anda kembali melihat apakah ini memperbaiki keadaan untuk Anda. Karena Anda sudah memeriksanya untuk menghilangkan masalah terkait - saya rasa ini mungkin membantu Anda.
(Saya tahu saya akan mengambil risiko downvote oleh orang pemarah)
Solusi 3:
Saya setuju bahwa menonaktifkan overcommit lebih aman daripada mengaktifkannya dalam beberapa keadaan. Jika server hanya menjalankan beberapa pekerjaan memori besar (seperti simulasi sirkuit dalam kasus saya), jauh lebih aman untuk menolak aplikasi permintaan memori di muka daripada menunggu acara OOM (yang pasti akan segera menyusul) Cukup sering kita melihat server mengalami masalah setelah pembunuh OOM melakukan tugasnya.