cgroups
Bunu yapmanın doğru yolu, diğer cevapların işaret ettiği gibi. Ne yazık ki, aşağıda ele alacağımız gibi, sorun için mükemmel bir çözüm yoktur. Grup hafızası kullanım sınırlarını ayarlamanın bir sürü farklı yolu vardır. Bir kullanıcının oturum açma oturumunu otomatik olarak bir grubun parçası haline getirme sistemi sistemden sisteme değişir. Red Hat'in bazı araçları var, yani systemd .
memory.memsw.limit_in_bytes
ve memory.limit_in_bytes
sırasıyla takas dahil olmak üzere olmayan limitleri belirlemek. Dezavantajı memory.limit_in_bytes
, çekirdek tarafından önbelleğe alınan dosyaları, grubun kotasına karşı gruptaki işlemler adına sayar olmasıdır. Daha az önbellekleme, daha fazla diske erişim anlamına gelir; bu nedenle, sistemde başka bir bellek varsa, potansiyel olarak bazı performanslardan vazgeçersiniz.
Öte yandan, memory.soft_limit_in_bytes
grubun kotaya girmesine izin verir, ancak çekirdek OOM katili çağrılırsa, kotalarını aşan gruplar ilk önce mantıklı bir şekilde öldürülür. Bununla birlikte bunun dezavantajı, bir miktar belleğe derhal ihtiyaç duyulduğu durumlar olduğu ve OOM katilinin öldürmek için işlem aramaya vakti olmadığı ve bu durumda kontenjanlı kullanıcının işlemlerinden önce bir şeyler başarısız olabileceğidir. öldürdü.
ulimit
Ancak, bunun için kesinlikle yanlış bir araçtır. ulimit sanal bellek kullanımına sınırlar koyar; ki bu kesinlikle istediğiniz şeyi değildir. Birçok gerçek dünya uygulaması fiziksel bellekten çok daha fazla sanal bellek kullanır. Çöp toplanan çalışma sürelerinin çoğu (Java, Go) parçalanmayı önlemek için bu şekilde çalışır. Adres temizleyici ile derlenmişse, C'deki önemsiz bir "merhaba dünya" programı, 20 TB sanal belleği kullanabilir. Güvenmeyin Tahsisatçılar sbrk
gibi jemalloc (ki Rust için varsayılan ayırıcısı olan) ya da tcmallocAyrıca, fiziksel kullanımlarından büyük ölçüde sanal bellek kullanımına da sahip olacaktır. Verimlilik için, birçok araç sanal kullanımı artıran ancak fiziksel kullanımı gerektirmeyen dosyaları eşleştirecektir. Chrome süreçlerimin her biri 2 TB sanal bellek kullanıyor. 8GB fiziksel belleğe sahip bir dizüstü bilgisayardayım. Buradaki sanal bellek kotalarını kurmaya çalışan herhangi biri, Chrome'u kırabilir, Chrome'u büyük miktarlarda sanal bellek ayırmaya (ancak kullanmamasına) bağlı olan bazı güvenlik özelliklerini devre dışı bırakmaya zorlar veya bir kullanıcının sistemi kötüye kullanmasını engellemekte tamamen etkisiz kalır .