Yanıtlar:
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:
- OOM Katilini devre dışı bırak (
vm.oom-kill = 0
/etc/sysctl.conf dosyasına koy )- Devre Dışı bellek overcommit (Put
vm.overcommit_memory = 2
in/etc/sysctl.conf
)Bu ayarlar Linux'un geleneksel şekilde davranmasını sağlar (bir işlem kullanılabilir olandan daha fazla bellek isterse
Bunun üçlü bir değer olduğuna dikkat edin:malloc()
başarısız olur ve bellek isteyen işlemin bu başarısızlıkla başa çıkması beklenir).
- 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.
NOT: Sisteminizin belleği dolduğunda, yeni işlemler oluşturamazsınız! Sistemden kilitli olabilirsiniz.
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.