Selain jawaban lain, Anda dapat mengonfigurasi Linux untuk meminta dukungan untuk memori yang dialokasikan, bahkan jika program tidak menggunakannya.
Memori yang berlebihan dan takut pembunuh OOM bukan bagian penting dari pengalaman Linux. Cukup dengan mengatur parameter sysctl vm / overcommit_memory ke 2 mematikan perilaku overcommit dan menjaga pembunuh OOM selamanya. Sebagian besar sistem modern harus memiliki ruang disk yang cukup untuk menyediakan file swap yang cukup untuk sebagian besar situasi. Daripada mencoba menjaga proses hewan peliharaan agar tidak terbunuh ketika memori yang terlalu banyak terjadi, mungkin lebih mudah untuk menghindari situasi sama sekali. [ Tangguh dari pembunuh OOM ]
Jika suatu program mengalokasikan memori, kernel dapat dengan mudah menandai lebih banyak halaman swap sebagai komitmen. Indikasi ini disimpan di manajer memori kernel, ruang disk sebenarnya belum tersentuh. Sampai memori itu digunakan, tidak ada yang benar-benar harus ditukar masuk dan keluar. Jika mereka tidak pernah digunakan, maka swap penggunaan akan berfluktuasi tanpa mempengaruhi kinerja.
Karena proses disajikan dengan ruang alamat mereka sendiri atau "view" (beginilah swap bekerja di tempat pertama), kernel memiliki banyak kelonggaran dalam bagaimana mengaturnya. Menggunakan contoh fork juga dari artikel yang ditautkan di atas, karena jauh lebih mungkin untuk berbagi halaman memori daripada untuk mengalokasikan sejumlah besar memori yang tidak digunakan, memori dapat dialokasikan copy-on-write, meningkatkan jumlah penggunaan swap. Ketika sebenarnya ditulis untuk (yang mungkin tidak terjadi), maka "swap berkomitmen" dapat diganti dengan RAM yang tidak digunakan (kemudian meningkatkan penggunaan RAM dan mengurangi penggunaan swap). Bayangkan sebuah proses dengan alokasi 500MB yang garpu pada mesin dengan semua atau hampir semua RAM yang digunakan. Jika ada 500MB tersedia dalam swap (dan ruang disk murah, seberapa besar 1% dari drive TB saat ini?: P), tidak ada memori yang harus disalin (belum,
Dengan demikian kemungkinan pembunuh OOM dihindari, dan jauh lebih mudah untuk merancang sebagian besar perangkat lunak dengan asumsi bahwa alokasi memori (termasuk alokasi "implisit" melalui sesuatu seperti garpu) baik berhasil atau gagal segera, dengan realisasi praktis bahwa jika memori harus ditukar maka itu mungkin mempengaruhi kinerja. Dampak itu hampir selalu kecil, tetapi dalam kasus terburuk menyebabkan swap meronta-ronta (kadang-kadang masih lebih disukai daripada crash kernel langsung atau pembunuh OOM).
Meskipun saya tidak tahu detail pasti tentang cara kerja manajer memori Linux, jawaban ini adalah pemahaman umum saya sendiri dan apa yang saya ingat baca selama bertahun-tahun. Saya telah mencoba mengedit kembali jawaban ini sehingga diperlukan pemahaman minimal tentang desain OS (ini sangat kompleks dan bukan sesuatu yang saya sangat tertarik pada diri saya sendiri), tetapi tampaknya sedikit mengoceh; tolong beri tahu saya jika Anda melihat cara meningkatkannya. Di sisi lain, itu mungkin bukan pertanyaan mendasar yang memalukan.