Ders 2.50: Bellek sınırları ve OOM öldürücüsü
Bir Linux makinesinin belleği tükendiğinde çekirdeğin OOM öldürücüsü geri kalanını kurtarmak için bir süreci sonlandırır ve seçimini suça göre değil boyuta göre yapar. Denetim grupları (cgroups v2) her hizmete kendi bellek ve işlemci bütçesini vermeni sağlar; böylece bir sızıntı yalnızca sızdıranı etkiler. Laboratuvarda Northwind'in görsel yeniden boyutlandırıcısı gece boyunca bellek sızdırdı ve çekirdek onun yerine veritabanını öldürdü. Çekirdeğin raporunu okuyor, hizmetin cgroup'unu görüyor, yeniden boyutlandırıcıyı systemctl set-property ile sınırlıyor ve veritabanını OOM öldürücüsünün en son seçeceği şey yapıyorsun.
18 dk
Bu derste öğreneceklerin
- Çekirdek günlüğündeki OOM öldürücüsü iletilerini okumak
- cgroups v2'nin bir hizmeti nasıl sınırladığını açıklamak
- memory.current, memory.max ve memory.events'i okumak
- systemctl set-property ile MemoryHigh ve MemoryMax ayarlamak
- Kritik bir hizmeti OOMScoreAdjust ile korumak
Temel terimler
- cgroup (denetim grubu)
- Bellek, işlemci, G/Ç ve süreç sayısı için sınırları ve ölçümü paylaşan çekirdek süreç grubu.
- memory.high
- Yumuşak sınır: üstünde çekirdek belleği zorla geri kazanır ve grubu yavaşlatır.
- memory.max
- Kesin sınır: grup onu aşamaz; geri kazanamazsa OOM öldürücüsü grubun içinde devreye girer.
- OOM öldürücüsü
- Bellek tükendiğinde bir süreci sonlandıran çekirdek yordamı; bir kötülük puanına göre seçer.
- oom_score_adj
- -1000'den (asla öldürme) +1000'e (önce öldür) kadar süreç başına ayar.
- systemctl set-property
- Bir birimin kaynak ayarlarını çalışırken değiştirir ve ek parça olarak kaydeder.
← logrotate: günlüklerin diski doldurmasını önlemek · Tüm dersler · Bir kişinin çalıştırdığı her programı denetlemek →