Dijelaskan di sini bahwa OOM-Killer dapat dikonfigurasi melalui overcommit_memory
dan bahwa:
- 2 = tidak ada komitmen berlebihan. Alokasi gagal jika terlalu banyak bertanya.
- 0, 1 = overcommit (heuristik atau selalu). Matikan beberapa proses berdasarkan beberapa heuristik ketika terlalu banyak memori yang sebenarnya diakses.
Sekarang, saya mungkin benar-benar salah paham akan hal itu, tetapi mengapa tidak ada opsi (atau mengapa itu bukan default) untuk mematikan proses yang sebenarnya mencoba mengakses terlalu banyak memori yang dialokasikan?
linux
out-of-memory
Martin Ba
sumber
sumber
no overcommit
opsi dasarnya lakukan. Jika suatu proses meminta terlalu banyak memori, itu gagal. Jika memeriksa kesalahan, biasanya akan bunuh diri; jika tidak, itu mungkin akan mendapatkan Kesalahan Segmentasi ketika mencoba untuk mengubah referensi null pointer yangmalloc()
kembali, dan itu akan crash.no overcommit
mode, menurut sumber yang dikutip (seperti kernel.org/doc/Documentation/vm/overcommit-accounting ). Saya pikir saya akan mengedit pertanyaan Anda sesuai.Jawaban:
Pertimbangkan skenario ini:
Jika proses yang terbunuh adalah proses terakhir untuk meminta memori, manajer tugas Anda akan terbunuh.
Atau:
Sekarang server X Anda terbunuh. Itu tidak menyebabkan masalah; itu hanya "di tempat yang salah di waktu yang salah". Itu adalah proses pertama untuk mengalokasikan lebih banyak memori ketika tidak ada lagi yang tersisa, tetapi bukan proses yang menggunakan semua memori untuk memulai.
sumber