Linux Benim Ram'ım Yedi sorununu yaşıyorsun .
Panik yapma.
Bu sorun değil.
Sisteminiz Tasarlandığı Gibi Çalışıyor.
Sorun işletim sisteminiz değil - sorun “boş” belleğin ne olduğunu anlamanızdır.
Unix sistemleri sadece çalışan programlardan daha fazlası için bellek kullanır. Bellek aşağıdakiler için kullanılabilir:
- Çalışan programlar (aktif / kullanılmış)
- Transit veride tamponlama (tamponlar)
- Önbelleğe alma son zamanlarda okunan / diske yazılan verileri önbellek
- Kesinlikle hiçbir şey (ücretsiz)
Aşağıdaki, modern Unix sistemlerinin RAM kullanımını nasıl rapor ettiği ile ilgili kısa (ve büyük ölçüde eksik) bir tur.
Boş hafıza nedir (işletim sistemi tanımı) ?
Bir Unix sistemi RAM’i Ücretsiz olarak rapor ederken, "Bu RAM’i hiçbir şey için kullanmıyorum" anlamına gelir.
Ücretsiz RAM etkin bir şekilde işe yaramaz - Sisteminizi daha hızlı hale getirmiyor, sadece bir şeyin ihtiyaç duyması durumunda "özgür" olarak oturuyor. Bir şey yukarıda bahsettiğim diğer üç maddeden herhangi biri olabilir.
Önbellek ve Arabellek nedir?
Önbellek ve Arabellek belleği, sisteminizi daha hızlı hale getirmek için işletim sisteminin kullandığı RAM'dir. Şu anda programları çalıştırmak için
bu bellek gerekli değildir , bu nedenle işletim sisteminiz sık kullanması gereken verileri tutmak için kullanıyor - örneğin C kütüphanesi (çalıştırdığınız hemen hemen her program tarafından gerekli) neredeyse her zaman cache
bellekte tutulur , yani Sistem, ekranda "Hello World" yazdırması için gereken talimatları bulmak için diske gitmek zorunda değildir.
Aslında bundan çok daha karmaşık - paylaşılan hafıza, kablolu hafıza vb. - ama amaçlarımız için bu basit açıklama yeterli.
Aktif bellek nedir?
Aktif bellek, "kullanılmış" bellek - uygulamaların ne yapıyorlarsa kullandıkları RAM - elektronik tabloları sıralama, web sayfaları sunma, grafik düzenleme vb.
" Olarak anlıyoruz. " Aktif "bellek son zamanlarda" etkin "oldu - - içeriğini kullandığını iddia eden program (okuma veya yazma) ve takas için iyi bir aday olarak kabul edilmez.
Aktif olmayan hafıza nedir?
Etkin bellek gibi, Etkin olmayan bellek de uygulamaların ne yaparlarsa kullandığı RAM'dir. Aradaki fark, bu belleğe bir süredir erişilemedi, bu yüzden eğer itme işletim sistemi zorlamak için gelirse, diske ve (biraz şans ile) değiştirilebileceğini iddia eden program tekrar isteyip istemediğini iddia ediyor. asla farketmeyeceğim.
"Kullanılmış" bellek nedir (İNSAN tanımı)
Sizin ve benim "Kullanılmış" bellek olarak düşündüğümüz şey, esas olarak, Aktif ve Aktif Değil belleğin toplamıdır. Tüm RAM şu anda kullanımlarında uygulamalar tarafından talep edildi.
Aktif ve Aktif Değil hafızasının toplamından daha fazla RAM yüklü olduğu sürece (artı 512-1024 MB’lık iyi bir güvenlik marjı), iyi bir yerdesiniz: İşletim sisteminiz büyük olasılıkla takas ve çarpma performansını düşürmeyecek .
"Boş" hafıza (İNSAN tanımı) nedir?
Sizin ve benim "boş" hafıza olarak düşündüğümüz şey programları çalıştırmak için mevcut hafızadır.
Bu, işletim sisteminizin rapor ettiği "Ücretsiz" rakamdan biraz daha karmaşıktır. Bir program RAM istediğinde, işletim sistemi bu RAM'i olabildiğince yıkıcı bir şekilde almaya çalışacaktır:
- Boş hafıza varsa (hiçbir şey yapmadan otururken) bu RAM tahsis edilecektir.
- Boş hafıza yoksa, işletim sistemi Önbellek ve Arabellek alanını yamyamlaştırır: Arabellek havuzundaki en yakın zamanda / en sık erişilen şeyler atılır ve programa verilen RAM verilir.
- Takas makinesini yamyamlaştırmak için bir Tampon / Önbellek RAMi yoksa, etkin olmayan belleğe bakacak ve erişilmesinin en az muhtemel olduğunu düşündüğü bölgeleri seçecektir. Bu veriler takas (disk) ve programa verilen yeni-serbest bırakılmış RAM'le dışarı aktarılır .
- Tüm Aktif Olmayan RAM'leri değiştirilmişse, swapper Aktif RAM'i diske yerleştirmeye başlayacaktır.
(Bu, performansın genellikle köpeklere gittiği yerle ilgilidir: Bir program CPU'yu her açışında, değiştirilen bitlerinin RAM'e geri getirilmesi gerekir, bu da başka bir programın Aktif belleğinin çıkarılması gerektiği anlamına gelir . takas işleminde yüksek devir hızı denir )
- Sistem yapabileceği her şeyi değiştirmişse (ve takas bölümünü doldurmuşsa) veya takas bölümü olmayan bir sistemi kullanıyorsanız , Kötü Şeyler olur. Bu noktada iki şeyden biri gerçekleşecek:
malloc()
başaramayacak. Bu POSIX'e uygun davranıştır - işletim sistemi, programa RAM istediğini ve isteği yerine getiremediğini söyleyecektir.
Program daha az RAM isteyebilir veya daha küçük bir bellek parçasıyla yapamıyorsa temizleyebilir ve çıkabilir. (Program kötü yazılmışsa, sadece çökecektir.)
- Bir Linux kutusuysanız , OOM-Killer çılgınlık tarzında bir sürüşe devam ederek çılgınlığı öldürerek, talebi yerine getirmek için yeterli RAM'i serbest bırakmaya çalışmak için diğer işlemleri sonlandırabilir.
Buradaki açıklamamı ve bağlantılı soruya cevabımı söyleyemezseniz, bunun sorunla başa çıkmanın korkunç bir yolu olduğunu düşünüyorum.
Dosyaları silerken neden Ücretsiz RAM çıkıyor?
Buradaki örnekte, yedek dosyayı silerek RAM’in "Ücretsiz" olabileceğini fark ettiniz - bunun açıklaması oldukça basit: Bu dosyayı hiçbir şey kullanmadığından (açık dosya tanıtıcısı yok) ve artık erişilemiyor. dosya sistemi (bağlantısız), işletim sisteminin hiç kimsenin bir daha bu verilere erişemeyeceğini bilir ve verileri dosya sistemi önbelleğinden temizler.
Bu işletim sistemi raporunu daha fazla boş hafıza yapar, ancak sistemin performansı üzerinde hiçbir etkisi yoktur.