Yorumunuzdan, sistem sadece değişiyor gibi görünüyor.
Linux'un OOM katili var, bu sistem bellekte fazla çalıştığında çağrılıyor ve şimdi tükeniyor.
Linux varsayılan olarak aşırı bellek gerçekleştirir, bu da programlara sistemin gerçekte olduğundan daha fazla bellek verdiği anlamına gelir. Bu, programların gerçekten istedikleri hafızayı kullanmayacağı varsayımıyla yapar. Ancak, sistemin belleği dolduğunda, çalışan çeşitli işlemlere zaten belleğe sahip olduklarını söylemişti, bu yüzden artık onu reddedemez. Bunun yerine OOM katilini çağırmak. OOM katili temel olarak çekirdeğin bellek yetersiz durumunu hafifleteceğini düşündüğü bir süreç bulur. Genellikle bu sadece en fazla belleği kullanan işlemdir, ancak algoritma aslında bundan çok daha karmaşıktır.
Eğer beri overcommit_memory
ayarlı 0
(otomatik mod), çekirdek bellek overcommit gerçekleştiriyor. Yani açıkladığınız davranıştan, sistemin sadece çok fazla değiştiği anlaşılıyor.
Buradan 2 seçenek var.
Takas oranını azalt
Sisteminizde RAM bitiyor ve böylece çekirdek bir şeyi takas etmeye başlıyor. Sisteminizde takas kalmazsa, OOM katilini çağırır. Ancak boş takas alanınız kaldığı için bu gerçekleşmez.
Orijinal fikriniz, bir işlemi elle öldürün.
Sistemin çok fazla değiştiğini ve bir şeyin ölmesi gerektiğini düşündüğünüzde bir işlemi manuel olarak öldürebilirsiniz. Bu, çekirdek SysRq tetikleyicileri aracılığıyla yapılabilir.
Çekirdeğin "sihirli SysRq" dediği şey var. Bu, çekirdeğe bir tür acil durum işlemi gerçekleştirmesini söyleyen bir işlevdir. Bu, "salt okunur tüm birimleri yeniden", "tüm dosya sistemlerini senkronize et" veya "şimdi yeniden başlat" gibi şeyler olabilir. Bu seçeneklerden biri de OOM katilini çağırmaktır.
Çekirdeğinizde sihirli SysRq etkinleştirilmişse (çekirdek seçeneği CONFIG_MAGIC_SYSRQ
), bunu 2 şekilde yapabilirsiniz.
- Alt+ SysRq+ f
Klavyedeki bu 3 tuşa basmanız yeterlidir.
echo f > /proc/sysrq-trigger
Bu, klavye yöntemiyle tam olarak aynı görevi gerçekleştirir, ancak bunu programlı olarak yapar.
Ayrıca takas işlemini tamamen devre dışı bırakabilirsiniz ve sistemlerimin çoğunda ve tam da bu nedenle bunu yapıyorum. Takas, çekirdeğin kullanılmayan verileri önleyici olarak değiştirmesi ve koçunuzun daha fazlasının önbellekleme için kullanılmasına izin vermesi açısından faydalıdır. Ama bu gördüğünüz zorla takas sorununa yol açıyor.
Bence en iyi çözüm, zorla takas konusunda OOM katilini çağırmak için bir çeşit çekirdek seçeneği olduğunu düşünüyorum. Temel olarak önleyici takasın çalışmasına izin verin, ancak çekirdek RAM dışında olduğunuz için bir şeyi takas haline getirmek zorunda kalırsa, OOM katilini çağırın.
Ne yazık ki bu sadece kendi kişisel dileğim. Bunu yapmaz.