Ben böyle nadir bir sorun değil sanırım: bir işlem büyük miktarda bellek ayırır (bellek sızıntısı hata nedeniyle olsun, çünkü inanılmaz derecede büyük bir giriş dosyası veya herhangi bir şey işlemeye çalışın). RAM dolar ve bir noktada Linux değiş tokuşa geçmek zorunda kalır. Eh, bazen bu sadece son çare: Eğer pahalı bir hesaplama varsa, sonuna doğru RAM tükendiğinde veri kaybetmek istemiyorum.
Bununla birlikte, daha sık (deneyimlerime göre), bellek tüketimi, hileli, belki de buggy bir süreçle sınırsızdır. Yani, sadece takas için taşınan daha az acil olarak ihtiyaç duyulan bazı verilerle sonuçlanmıyorum, ancak işletim sistemi panik veriyi takas etmek zorunda kalıyor. Ve bu ne yazık ki rahatsız edici süreci ağır bir şekilde kırmakla kalmıyor, aynı zamanda tüm sistemi neredeyse durma noktasına getirebiliyor (SSD'li makinelerde artık o kadar da kötü değil, ama OTOH, gigabayt ve gigabayt çöp verileri yazmanın uzun süreli flaş hücrelerine zarar verir).
Sorunu fark edene ve işlemi manuel olarak öldürene kadar (kendimi sanal bir terminale bile girmem birkaç dakika sürdü!), Koşu seansımın yarısı değiş tokuşta ve sistem düzgün çalışana kadar biraz beklemem gerekiyor tekrar.
Sorunun tek bir acımasız çözümü var: bir sabit bellek sınırı uygulayın. Ama bu sistem çapında yapmak bazen hala ihtiyacım olan süreçleri öldürür ve eğer ulimit
rahatsız edici bir işleme başlamadan önce manuel olarak yapmak zorunda kalırsam ... şey, çok geç olana kadar sık sık unutacağım.
Daha mutlu olacağım olası çözüm türleri:
- Herhangi bir işlem belirli bir bellek kullanımını aşarsa, yapay olarak kısıtlanır, böylece sistemin geri kalanı yanıt verir.
- Herhangi bir işlem belirli bir bellek kullanımını aşarsa,
SIGSTOP
ped. - Bir işlem RAM sınırına yaklaşırsa , büyük değişim başlamadan önce bir uyarı alırım .
Böyle bir davranış veya benzeri bir şey elde etmenin herhangi bir yolu var mı?
ulimit
içindir.