GNU/Linux >> Belajar Linux >  >> Linux

Linux – Bagaimana Pembunuh Oom Memutuskan Proses Mana Yang Harus Dibunuh Pertama?

Jawaban ini menjelaskan tindakan yang diambil oleh kernel ketika situasi OOM ditemukan berdasarkan nilai sysctl vm.overcommit_memory .

Ketika overcommit_memory diatur ke 0 atau 1, overcommit diaktifkan, dan program diizinkan untuk mengalokasikan lebih banyak memori daripada yang sebenarnya tersedia.

Sekarang apa yang terjadi ketika kita kehabisan memori dalam situasi ini? Bagaimana pembunuh OOM memutuskan proses mana yang harus dibunuh terlebih dahulu?

Jawaban yang Diterima:

Jika memori habis-habisan digunakan oleh proses, sejauh yang mungkin dapat mengancam stabilitas sistem, maka pembunuh OOM muncul.

CATATAN: Ini adalah tugas OOM Killer untuk melanjutkan mematikan proses hingga memori yang cukup dibebaskan untuk kelancaran fungsi proses lainnya yang coba dijalankan oleh Kernel.

Pembunuh OOM harus memilih yang terbaik proses untuk membunuh. Terbaik di sini mengacu pada proses yang akan membebaskan memori maksimum setelah membunuh dan juga yang paling tidak penting bagi sistem.

Tujuan utamanya adalah untuk mematikan proses paling sedikit yang meminimalkan kerusakan yang terjadi dan pada saat yang sama memaksimalkan jumlah memori yang dibebaskan.

Untuk memfasilitasi ini, kernel memelihara oom_score untuk masing-masing proses. Anda dapat melihat oom_score dari setiap proses di /proc sistem file di bawah pid direktori.

$ cat /proc/10292/oom_score

Semakin tinggi nilai oom_score dari proses apa pun, semakin tinggi kemungkinannya terbunuh oleh OOM Killer dalam situasi kehabisan memori.

Bagaimana OOM_Score dihitung?

Dalam set tambalan David, heuristik badness() lama hampir seluruhnya
hilang. Sebagai gantinya, perhitungan berubah menjadi pertanyaan sederhana tentang berapa
persentase memori yang tersedia yang digunakan oleh proses. Jika
sistem secara keseluruhan kekurangan memori, maka “memori yang tersedia” adalah
jumlah semua RAM dan ruang swap yang tersedia untuk sistem.

Jika sebaliknya, situasi OOM disebabkan oleh kehabisan memori yang diizinkan
ke cpuset/grup kontrol tertentu, maka "memori yang tersedia" adalah jumlah
total yang dialokasikan untuk grup kontrol tersebut. Perhitungan serupa dilakukan
jika batas yang ditetapkan oleh kebijakan memori telah terlampaui. Dalam setiap kasus,
penggunaan memori dari proses dianggap sebagai jumlah dari kumpulan
penduduknya (jumlah halaman RAM yang digunakannya) dan penggunaan swapnya.

Perhitungan ini menghasilkan angka persen-kali-sepuluh sebagai hasilnya; a
proses yang menggunakan setiap byte dari memori yang tersedia akan
mendapat skor 1000, sedangkan proses yang tidak menggunakan memori sama sekali akan mendapatkan
skor nol. Ada sedikit penyesuaian 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.

Salah satu tweak lain yang diterapkan adalah dengan menambahkan nilai yang tersimpan di setiap
variabel oom_score_adj proses, yang dapat disesuaikan melalui /proc.
Tombol ini memungkinkan penyesuaian daya tarik setiap proses ke
OOM pembunuh di ruang pengguna; menyetelnya ke -1000 akan menonaktifkan OOM
membunuh seluruhnya, sedangkan menyetel ke +1000 sama dengan mengecat
target besar pada proses terkait.

Referensi

Terkait:Kelemahan saat menggunakan chroot dalam komputasi kinerja tinggi?

http://www.queryhome.com/15491/whats-happening-kernel-starting-killer-choose-which-process https://serverfault.com/a/571326


Linux
  1. Cara Menemukan dan Membunuh Proses Zombie di Linux

  2. Cara Membunuh Proses Terbesar Dalam Sistem Linux yang Tidak Responsif

  3. Pembunuh Kehabisan Memori Linux

  1. Bagaimana cara kerja copy_from_user dari kernel Linux secara internal?

  2. Bagaimana pip memutuskan roda linux mana yang akan digunakan?

  3. Bagaimana penggunaan memori dilaporkan di Linux?

  1. Cara mematikan proses zombie di Linux

  2. Bagaimana cara mematikan proses di Linux menggunakan perintah?

  3. Menemukan proses mana yang dibunuh oleh pembunuh OOM Linux