Boş RAM varsa nasıl takas boş?

253

RAM yoğun bir uygulama açtığımda (VirtualBox, 2GB RAM'de ayarlanmış), zaman içinde başka neler açabileceğime bağlı olarak, bazı takas alanı genellikle kullanılır.

Ancak, bu son uygulamayı bıraktığımda, 2 GB RAM boşaltılabilir, ancak aynı takas alanı kullanımı kalır.

Örneğin, şu anda, VirtualBox'ı kapattıktan yaklaşık iki saat sonra, 1,6 GB boş RAM'im ve hala takas halinde 770MB var.

Ubuntu'ya bu takası kullanmayı bırakıp RAM'i kullanmaya geri dönmesini nasıl söyleyebilirim?

    
sordu jfoucher 06.08.2010 08:43

6 cevap

146

Sadece takas ayrıldığından, 'kullanılmış' olduğu anlamına gelmez. Sistem izleyicisi ve üst kısmı gibi programlar, takas alanınızın bir kısmını (örnek 770MB’nızda) tahsis edildiğini gösterirken, bu, sistemin aktif olarak içeri / dışarı geçiş yaptığı anlamına gelmez.

Herhangi bir şeyin içeri / dışarı değişip değişmediğini öğrenmek için vmstat komutunu kullanabilirsiniz. Yerleşmek için birkaç saniye çalıştırın ve si (swapin) ve so (swapout) sütunlarını izleyin. Eğer hiçbir şey olmuyorsa, endişelenecek bir sebep yok.

İşte, makinemin hiç değişmediğini gördüğünüz vmstat 1 çalışmasının çıktısı.

procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 0  0  78588 230788   9596  72196    0    0     0     0  543  652 12  6 78  0
 0  0  78588 230780   9596  72196    0    0     0     0  531  410  1  0 99  0
 0  0  78588 230796   9596  72196    0    0     0     0  300  335  1  1 97  0
 1  0  78588 230788   9608  72224    0    0    40     0  737  762  4  4 84  8
 5  0  78588 230788   9608  72224    0    0     0     0  415  385  9  3 84  0
 0  0  78588 230540   9616  72224    0    0     0    44  611  556 55  5 31  0
 0  0  78588 230532   9616  72224    0    0     0     0  574  662  1  6 89  0

Yine burada top 'de tahsis edilen takas alanım var: -

Mem:    475236k total,   245076k used,   230160k free,     9720k buffers
Swap:   491512k total,    78588k used,   412924k free,    72476k cached
    
verilen cevap popey 06.08.2010 12:04
347

Ubuntu'nun altında yatan Linux çekirdeği otomatik olarak bu sayfaları diskten RAM'e gerektiğinde değiştirir, böylece genel olarak bunun doğal olarak gerçekleşmesini söylerim.

Ancak, gerçekten zorlamanız gerektiğini düşünüyorsanız, (sistemi daha sonra yanıtlamak isteyeceğiniz bir senaryo görürsünüz.) anlık olarak devre dışı bırakabilir ve yeniden etkinleştirebilirsiniz

sudo swapoff -a
sudo swapon -a

VEYA alternatif olarak tek bir komut olarak

swapoff -a && swapon -a

Bunu yaparken dikkatli olun, çünkü sisteminizi kararsız hale getirebilirsiniz, özellikle de RAM zaten düşükse.

    
verilen cevap SpamapS 06.08.2010 08:47
119

Ayrıca "swappiness" değerini 60 varsayılan değerinden de ayarlayabilirsiniz, bu şekilde swap, başlayacak kadar büyük olmayacaktır. Önerilen değer 10 perplexes olduğunda, gönderim varsayılan değeri 60 olarak ayarlanır. Ubuntu SwapFAQ’dan :

  

Ubuntu'daki varsayılan ayar, swappiness = 60'dır. Varsayılan değiştirilme değerinin azaltılması, tipik bir Ubuntu masaüstü kurulumunun genel performansını artıracaktır. Değişim değeri = 10 önerilir , ancak denemekten çekinmeyin.

Bu değeri 10 veya hatta 0 değiştirerek, yavaş bir sürücüye sahip eski bir sisteme önemli ve algılanabilir bir hız artışı ekleyebilirsiniz. Bu değeri 0 olarak ayarlamak, Linux çekirdeği 3.4 ve altında ancak 3.5+ ile değiş tokuş etmiyor, böylece en düşük ayarında tutmak istiyorsanız 1 değerini kullanmak isteyeceksiniz *.

Diske çarpan bir şey RAM'den daha yavaş olduğu için bunu 0 olarak ayarlamamam için bir neden göremiyorum. 8 sanal çekirdek var, hızlı bir SSD & amp; 8 GB bellek ve takasım 0 olarak ayarlandı. Şu andan itibaren 3 sanal makinem var, bellek kullanımım 7,7 GB 7, kullanılan swapım sadece 572 KB 952MB ve tüm sistemler sorunsuz çalışıyor!

Ubuntu SwapFAQ’dan :

  

Swappiness parametresi, çekirdeğin işlemleri fiziksel bellekten ve takas diskine taşıma eğilimini denetler. Diskler RAM'den çok daha yavaş olduğundan, süreçler çok agresif bir şekilde bellek dışına taşınırsa sistem ve uygulamalar için daha yavaş yanıt sürelerine neden olabilir.

     
  1. swappiness değeri 0 ile 100
  2. arasında bir değere sahip olabilir   
  3. swappiness = 0, çekirdeğe mümkün olan en uzun süre boyunca fiziksel bellek dışında işlem yapmayı engellemesini söyler
  4.   
  5. swappiness = 100, çekirdeğin fiziksel bellekteki işlemleri agresif olarak değiştirmesini ve bunları önbelleğe almasını söyler
  6.   

Aşağıda swappiness'i kontrol etmek, takasınızı boşaltmak ve swappiness değerini değiştirmek için temel talimatlar verilmiştir:

Takas değerini kontrol etmek için:

cat /proc/sys/vm/swappiness

Takası geçici olarak 0 olarak ayarlamak için ( SpamapS tarafından önerildiği gibi ):

Bu, takasınızı boşaltır ve tüm takası belleğe geri aktarır. Öncelikle, gnome-system-monitor'un kaynak sekmesini görüntüleyerek yeterli hafızaya sahip olduğunuzdan emin olun, boş belleğiniz kullanılan takasınızdan daha büyük olmalıdır. Bu işlem biraz zaman alabilir, ilerlemeyi izlemek ve doğrulamak için gnome-system-monitor'u kullanın.

sudo swapoff --all

Yeni değeri 0 olarak ayarlamak için:

sudo sysctl vm.swappiness=0 

Takas işlemini tekrar açmak için:

sudo swapon --all

Takaslılığı kalıcı olarak 0 olarak ayarlamak için:

  1. sudoedit /etc/sysctl.conf
  2. Bu satırı vm.swappiness = 0
  3. ekle
  4. sudo shutdown -r now # yeniden başlatma sistemi

* Çekirdek sürümü 3.5+ sürümü ile swappiness'in 0'a ayarlanması tamamen kapatır ve en düşük swappiness algoritmasını istiyorsanız 1 ayarı önerilir. Kaynak: İşte

    
verilen cevap Elijah Lynn 11.06.2012 16:10
46

Boşaltma takasının yavaş diskler ve sınırlı RAM sistemlerinde çok yardımcı olabileceğini keşfettim. Elbette, daha önce de belirtildiği gibi, bunu yapmanın yolu sudo swapoff -a; sudo swapon -a çalışmasını sağlamaktır. Sorun şu ki, yeterli RAM yoksa, bunu yapmak her türlü soruna yol açacaktır.

Son birkaç yıldır benim için çalışmış toggle_swap diye adlandırdığım bir komut dosyası yazdım. Takas işlemini gerçekten devre dışı bırakmadan önce yeterli boş RAM'i kontrol eder. İşte:

#!/bin/bash

free_data="$(free)"
mem_data="$(echo "$free_data" | grep 'Mem:')"
free_mem="$(echo "$mem_data" | awk '{print }')"
buffers="$(echo "$mem_data" | awk '{print }')"
cache="$(echo "$mem_data" | awk '{print }')"
total_free=$((free_mem + buffers + cache))
used_swap="$(echo "$free_data" | grep 'Swap:' | awk '{print }')"

echo -e "Free memory:\t$total_free kB ($((total_free / 1024)) MB)\nUsed swap:\t$used_swap kB ($((used_swap / 1024)) MB)"
if [[ $used_swap -eq 0 ]]; then
    echo "Congratulations! No swap is in use."
elif [[ $used_swap -lt $total_free ]]; then
    echo "Freeing swap..."
    sudo swapoff -a
    sudo swapon -a
else
    echo "Not enough free memory. Exiting."
    exit 1
fi
    
verilen cevap Scott Severance 25.12.2011 17:35
23

birkaç gün için swappiness mucking sonra çekirdek olması gerektiğini sonuca geldik kendi cihazlarına bırakıldı. Ne yaptığını biliyor ve size en iyi deneyimi sunmak için optimize edildi.

Bu diski geri almak için gerçekten iyi bir nedeniniz olmadıkça, onu bırakırım.

    
verilen cevap Erigami 06.08.2010 18:34
1

Takas alanınız doluysa, performansı etkilemez. Tek performans cezası, takas içine girip çıkıyor. Hiçbir şey değiştirilmediyse / değiştirilmediyse, hiçbir şey için endişelenmenize gerek yok.

    
verilen cevap Rory 11.08.2010 21:35

Etiketlerdeki diğer soruları oku