Oom-katil tarafından öldürülen bir sürecin temel dökümü / hata ayıklaması


10

Oom-katil tarafından öldürülen bir işlemin çekirdek dökümü almanın veya hata ayıklamanın herhangi bir yolu var mı?

Ya da oom-katili ABRT kullanarak bir işlemi öldürmeye mi ayarladınız?

Yanıtlar:


5

Başka bir yaklaşım, belleğin aşırı yüklenmesini devre dışı bırakmaktır.

Bellek yönetiminize akıl sağlığını bir miktar geri yüklemek için:

  1. OOM Katilini devre dışı bırak ( vm.oom-kill = 0/etc/sysctl.conf dosyasına koy )
  2. Devre Dışı bellek overcommit (Put vm.overcommit_memory = 2in /etc/sysctl.conf)

Bu ayarlar Linux'un geleneksel şekilde davranmasını sağlar (bir işlem kullanılabilir olandan daha fazla bellek isterse malloc()başarısız olur ve bellek isteyen işlemin bu başarısızlıkla başa çıkması beklenir).

Bunun üçlü bir değer olduğuna dikkat edin:
  • 0 = "yeterli RAM'imiz olup olmadığını tahmin et"
  • 1 = "Her zaman evet de"
  • 2 = "hafızamız yoksa hayır deyin"

Bu, uygulamanın belleğin tükenmesini işlemesini zorlar ve muhtemelen günlükleri / coredump / vb. Size yararlı bir şey verebilir.

GÜNCELLEME # 1

NOT: Sisteminizin belleği dolduğunda, yeni işlemler oluşturamazsınız! Sistemden kilitli olabilirsiniz.


Bu korkunç bir fikir. Sisteminizde çalışan çoğu yazılım muhtemelen bellek ayırma hatasından dönen değeri doğru şekilde işlemez. Bunu yapmak, neredeyse hiç kimse tarafından çalıştırılmayacak kod yollarının çalışmasına neden olur ve en kötü durumda, sisteminizde güvenlik açıklarının bu test edilmemiş ve beklenmedik kod yollarını çalıştırmasına bile neden olabilir.
KJ Tsanaktsidis

4
echo 1 > /proc/sys/vm/oom_dump_tasks

ki bu, çekirdeğin yetersiz bellek hatalarında görüntülenmesini sağlayabileceğiniz maks.

https://www.kernel.org/doc/Documentation/sysctl/vm.txt

Çekirdek bir OOM öldürme gerçekleştirdiğinde sistem çapında görev dökümü (çekirdek iş parçacıkları hariç) üretilmesini sağlar ve pid, uid, tgid, vm boyutu, rss, nr_ptes, swapentler, oom_score_adj puanı ve ad gibi bilgileri içerir. Bu, OOM katilinin neden çağrıldığını belirlemek, buna neden olan haydut görevi belirlemek ve OOM katilinin öldürmek için yaptığı görevi neden seçtiğini belirlemek için yararlıdır.

Bu sıfıra ayarlanırsa, bu bilgiler gizlenir. Binlerce görevi olan çok büyük sistemlerde, her biri için bellek durumu bilgilerinin dökümü mümkün olmayabilir. Bu tür sistemler, bilgi istenmeyebileceği OOM koşullarında bir performans cezasına çarptırılmamalıdır.

Bu sıfır dışında bir değere ayarlanırsa, bu bilgi OOM katili bir bellek atma görevini her öldürdüğünde gösterilir.

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.