Oom_score_adj'ı nasıl kullanırım?


24

11.04 tarihinde, /proc/[pid]içerdiği oom_score_adj, ancak man proceski anlatmaktadır oom_adj. Bunun nasıl kullanılacağı hakkında herhangi bir bilgi için başarısız olarak googledim.

Düzenlemem gereken şey, “pbs” veya “gridengine” tarafından başlatılan işlemlerin, başka bir şey öldürülmeden önce öldürülmesidir. Bunu nasıl yapabilirim?


Upstart tarafından yönetilen hizmetler için bu değişikliğin kalıcı olması: Daemon'lar için OOM katil ayarları kalıcı olarak nasıl yapılır? .
gertvdijk

Bu zaten bir cevap. Ona bağlanır. :)
gertvdijk

Ama bu sitede değil :-)
bmargulies

Yanıtlar:


13

Dayanarak kendi Q & A benzer bir soru üzerine Unix & Linux üzerinde.

Stuart'ın cevabında çok iyi ifade ettiği gibi , geçerli değerler -1000-1000 arasında tamsayılardır oom_score_adj. Değer ne kadar düşük olursa, öldürülme olasılığı o kadar düşük olur.

Uygulamayı yeniden başlattığınızda bu değeri tekrar tekrar değiştirmek zorunda kalmak çok zahmetlidir. Bilgi sonlandırıldıktan sonra kolayca kaybolur. Upstart (Ubuntu'daki init daemon), bunun için, yeniden başlatıldığında yeniden ayarlanmış olduğundan emin olmak için daemon'ları yapılandırmak için hoş bir seçeneğe sahiptir:

oom score

[...] kesmek [...]

Örnek:

# this application is a "resource hog"
oom score 1000

expect daemon
respawn
exec /usr/bin/leaky-app

Dolayısıyla, temelde, /etc/init/myservice.confbir satır eklemek üzere değiştirmek istediğiniz servislerin yapılandırma dosyasını düzenleyebilirsiniz oom score -1000. Sorunuzda bahsettiğiniz hizmetlerin 'pbs' veya 'gridengine' servislerinin Upstart özellikli olduğunu varsayalım, aksi halde bunu kalıcı olarak değiştirmek için başka bir yola ihtiyacınız olacaktır.


7

Oom-killer için önceliklendirmek istediğiniz işlemi gösteren başlangıç ​​betiğini değiştirebilirseniz, başlangıç ​​betiğine aşağıdakileri ekleyin:

echo 1000 > /proc/self/oom_score_adj

Değer, alt işlemler için miras alınır.


6

Oom_adj veya oom_score_adj için yüksek (ish) bir değer belirlerseniz, önce öldürülürler. Örneğin

echo 15 > /proc/[pid]/oom_adj

oom_adj -16 ila 15 arasındadır ve yukarıda belirtildiği gibi oom_score_adj -1000 ila 1000 kabul eder.


Bunu yapmak için kök olmanız gerekir. sudo sh -c "echo -1000 > /proc/[PID]/oom_score_adj"
Adil,

2
Aslında yapabilirsiniz artırmak için puan sizin kökü o ( "evet, bu oom öldürülmüş olabilir") w / süreçler. Azalan (0'ın altında) kök gerektirir.
Piskvor

5

Kodlara bakmak her zaman iyi bir fikirdir. Normalde kernel.org arama fonksiyonunu kullanıyorum, fakat şu anda kapalı. Github da iyi bir iş çıkarıyor. Bunu buldum:

Bunun yerine, -1000 ila +1000 arasında değişen yeni bir ayarlanabilir / proc / pid / oom_score_adj eklenir. Sezgiselleri kutupsallaştırmak için kullanılabilir, öyle ki bazı işler asla oom öldürmesi için dikkate alınmazken, diğerleri daima düşünülebilir. Değer doğrudan badness () puanına eklenir, bu nedenle -500 değerinde bir değer, örneğin bellek tüketiminin% 50'sini sistemdeki, mempolicy'ye bağlı, cpuset'teki veya diğer görevlere kıyasla indirim yapmak anlamına gelir. Aynı bellek denetleyicisini paylaşma.

Gönderen https://github.com/mirrors/linux-2.6/commit/a63d83f427fbce97a6cea0db2e64b0eb8435cd10#include/linux/oom.h


İşaretçi için teşekkürler, ama birisinin bu soruna yol açmayacağını umuyorum, bu sorun için herhangi bir işe yaramadan önce pbs yürütme cini için ayarlanacak gibi görünüyor.
bmargulies

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.