Bellek, işlemler tarafından, sistemin kararlılığını tehdit edebilecek ölçüde ayrıntılı bir şekilde kullanılmışsa, OOM katili resmin içine girer.
NOT: Çekirdeğin çalıştırmaya çalıştığı işlemin geri kalanının düzgün çalışması için yeterli bellek serbest bırakılıncaya kadar öldürme işlemlerine devam etmek OOM Katilinin görevidir.
OOM Killer, öldürmek için en iyi süreci seçmek zorundadır . Burada en iyisi , öldürme sırasında maksimum belleği boşaltacak olan ve aynı zamanda sistem için en az önem taşıyan işlemi ifade eder.
Birincil hedef, yapılan hasarı en aza indiren ve aynı zamanda boş kalan bellek miktarını en yükseğe çıkaran en az sayıda işlemi öldürmektir.
Bunu kolaylaştırmak için, çekirdek oom_score
işlemlerin her biri için bir tutar . Görebilirsiniz oom_score
süreçlerin her birinin /proc
altında dosya sistemi pid
dizininde.
$ cat /proc/10292/oom_score
oom_score
Herhangi bir işlemin değeri ne kadar yüksek olursa, bellek dışı bir durumda OOM Katili tarafından öldürülme olasılığı da o kadar yüksek olur .
Nasıl OOM_Score
hesaplanır?
David'in yama setinde eski kötülük () buluşma neredeyse tamamen ortadan kalktı. Bunun yerine hesaplama, mevcut belleğin yüzde kaçının işlem tarafından kullanıldığına dair basit bir soruya dönüşür. Eğer sistemin bir bütün olarak hafızası yetersiz ise, o zaman "mevcut hafıza" sistem için mevcut olan tüm RAM ve takas alanlarının toplamıdır.
Bunun yerine, OOM durumuna belirli bir cpuset / kontrol grubuna izin verilen hafızanın tüketilmesi neden olmuşsa, o zaman "kullanılabilir hafıza" bu kontrol grubuna tahsis edilen toplam tutardır. Bir hafıza politikası tarafından getirilen sınırların aşılması durumunda da benzer bir hesaplama yapılır. Her durumda, sürecin bellek kullanımı, yerleşik setinin (kullandığı RAM sayfalarının sayısı) ve takas kullanımının toplamı olarak kabul edilir.
Bu hesaplama sonuç olarak yüzde-on sayı üretir; Kullanılabilir hafızanın her baytını kullanan bir işlem 1000 puan alırken, hafızanın hiç kullanılmadığı bir işlem sıfır puan alır. Bu puan için çok az sayıda sezgisel tweaks var, ancak kod, kullanıcının sahip olduğu işlemlerden biraz daha değerli olduğu düşüncesiyle, hala kök işlemlere ait puandan küçük bir miktar (30) çıkartıyor.
Uygulanan bir başka ince ayar, her işlemin oom_score_adj değişkeninde depolanan değeri / proc ile ayarlanabilen değer eklemektir. Bu düğme, her bir işlemin kullanıcı alanındaki OOM katiline çekiciliğinin ayarlanmasını sağlar; -1000 olarak ayarlamak, OOM ölümlerini tamamen devre dışı bırakırken, +1000 olarak ayarlamak ilişkili süreçte büyük bir hedefi boyamakla eşdeğerdir.
Referanslar
http://www.queryhome.com/15491/whats-happening-kernel-starting-killer-choose-which-process
https://serverfault.com/a/571326