Melihat di Google, dan tidak dapat menemukan apa pun yang menjelaskan bagaimana skor dalam proc/<pid>/oom_score
dihitung. Mengapa menggunakan skor ini alih-alih hanya menggunakan total memori yang digunakan?
Melihat di Google, dan tidak dapat menemukan apa pun yang menjelaskan bagaimana skor dalam proc/<pid>/oom_score
dihitung. Mengapa menggunakan skor ini alih-alih hanya menggunakan total memori yang digunakan?
Jawaban:
Lihat artikel Goldwyn Rodrigues 2009 untuk implementasinya saat itu, artikel Jonathan Corbet 2010 untuk apa yang saya yakini sebagai perilaku terkini, dan artikel Jonathan Corbet 2013 untuk ide-ide tentang perubahan di masa depan.
Dari artikel 2010:
Dalam set patch David, heuristik kejahatan lama () hampir seluruhnya hilang. Sebagai gantinya, perhitungan berubah menjadi pertanyaan sederhana tentang berapa persen dari memori yang tersedia yang digunakan oleh proses. Jika sistem secara keseluruhan kekurangan memori, maka "memori yang tersedia" adalah jumlah dari semua RAM dan ruang swap yang tersedia untuk sistem. Sebaliknya, jika situasi OOM disebabkan oleh kehabisan memori yang diizinkan untuk cpuset / kelompok kontrol yang diberikan, maka "memori yang tersedia" adalah jumlah total yang dialokasikan untuk kelompok kontrol itu. Perhitungan serupa dibuat jika batas yang diberlakukan oleh kebijakan memori telah terlampaui. Dalam setiap kasus, penggunaan memori dari proses dianggap sebagai jumlah dari set residennya (jumlah halaman RAM yang digunakannya) dan penggunaan swapnya.
Perhitungan ini menghasilkan angka persen-kali-sepuluh sebagai hasilnya; suatu proses yang menggunakan setiap byte dari memori yang tersedia untuk itu akan memiliki skor 1000, sedangkan proses yang tidak menggunakan memori sama sekali akan mendapatkan skor nol. Ada beberapa perubahan heuristik untuk skor ini, tetapi kode masih mengurangi sejumlah kecil (30) dari skor proses yang dimiliki root dengan anggapan bahwa mereka sedikit lebih berharga daripada proses yang dimiliki pengguna.
Satu tweak lain yang diterapkan adalah menambahkan nilai yang disimpan dalam variabel oom_score_adj setiap proses, yang dapat disesuaikan melalui / proc. Kenop ini memungkinkan penyesuaian daya tarik setiap proses dengan pembunuh OOM di ruang pengguna; mengaturnya ke -1000 akan menonaktifkan OOM kill sepenuhnya, sementara pengaturan ke +1000 adalah setara dengan mengecat target besar pada proses terkait.