it-swarm-tr.com

Boş RAM varsa takas nasıl boşaltılır?

Yoğun RAM uygulaması (2GB RAM'e ayarlanmış VirtualBox) açtığımda, o sırada başkaları tarafından açıldığına bağlı olarak genellikle bir takas alanı kullanılıyor.

Ancak, bu son uygulamadan çıktığımda, 2GB RAM serbest bırakılıyor, ancak aynı takas alanı kullanımı devam ediyor.

Örneğin, şu anda, VirtualBox'u kapattıktan yaklaşık iki saat sonra, 1.6GB boş RAM ve hala 770 MB takas veriyorum.

Ubuntu'ya bu takası kullanmayı bırakmasını ve RAM'i kullanmaya nasıl dönmesini nasıl söyleyebilirim?

312
jfoucher

Sadece takas tahsis edildiğinden, onun 'kullanıldığı' anlamına gelmez. Sistem monitörü ve üstü gibi programlar, takas alanınızın bir kısmının tahsis edildiğini gösterecektir (bu, örneğin 770MB’de), sistemin aktif olarak içeri/dışarı değiştiği anlamına gelmez.

Herhangi bir şeyin içeri/dışarı değişip değişmediğini anlamak için vmstat komutunu kullanabilirsiniz. Sakinleşmek ve si (takas) ve so (takas) sütunlarını izlemek için birkaç saniye çalışmasını sağlayın. Eğer hiçbir şey olmuyorsa endişelenmek için bir sebep yok.

İşte makinemin hiç değişmediğini görebileceğiniz vmstat 1 öğesinin çı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

Oysa burada top içinde görebildiğiniz takas alanı var: -

Mem:    475236k total,   245076k used,   230160k free,     9720k buffers
Swap:   491512k total,    78588k used,   412924k free,    72476k cached
168
popey

Ubuntu'nun altında yatan Linux çekirdeği, bu sayfaları gerektiğinde diskten RAM'e otomatik olarak "takas" eder, bu yüzden genel olarak sadece doğal olmasına izin veririm.

Ancak, gerçekten zorlamanız gerektiğini düşünüyorsanız, (sistemin daha sonra yanıt vereceğini bilmek isteyeceğiniz bir senaryo görebilirim) anlık olarak devre dışı bırakabilir ve takas özelliğini yeniden etkinleştirebilirsiniz.

Sudo swapoff -a
Sudo swapon -a

VEYA alternatif olarak tek bir satır olarak

swapoff -a; swapon -a

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

418
SpamapS

Ayrıca “takas” değerinizi 60'lık varsayılan değerden de ayarlayabilirsiniz, bu şekilde takas başlamak için çok büyük olmaz. Tavsiye edilen değer 10 beni şaşırtınca neden nakliye varsayılan değeri 60 olarak ayarlanmıştır. buntu SwapFAQ'dan :

Ubuntu’da varsayılan ayar swappiness = 60’tır. Varsayılan takas değerinin azaltılması, tipik bir Ubuntu masaüstü kurulumunda genel performansı artıracaktır. Bir takas değeri = 10 önerilmektedir , ancak deneme yapmaktan çekinmeyin.

Bu değeri 10 veya hatta 0 olarak değiştirerek, yavaş tahrikli eski bir sisteme kayda değer ve algılanabilir bir hız artışı ekleyebilirsiniz. Bu değerin 0'a ayarlanması, Linux çekirdeği 3.4 ve altındaki sürümleri kapatmaz, ancak 3.5+ ile değiştirir, böylece en düşük ayarda * tutmak istiyorsanız 1 değerini kullanmak istersiniz.

Diske çarpan herhangi bir şey RAM'den daha yavaş olduğundan, bunu 0'a ayarlamak için hiçbir neden görmüyorum. 8 sanal çekirdeğim, hızlı bir SSD ve 8 GB belleğim var ve takasım 0 olarak ayarlanmış. Şu andan itibaren 3 sanal makinem var, bellek kullanımım 7,7/7,7, kullanılmış swap sadece 576KB 952MB ve tüm sistemler sorunsuz çalışıyor!

buntu SwapFAQ'dan :

Değişim parametresi, çekirdeğin, işlemleri fiziksel bellekten ve değiştirme diskine taşıma eğilimini kontrol eder. Diskler RAM'den çok daha yavaş olduğundan, işlemler çok agresif bir şekilde bellekten taşınırsa, sistem ve uygulamalar için daha yavaş yanıt sürelerine neden olabilir.

  1. swappiness 0 ile 100 arasında bir değere sahip olabilir
  2. swappiness = 0, çekirdeğe fiziksel bellekten işlemlerin mümkün olduğunca uzun süre değiştirilmesini önler
  3. swappiness = 100, çekirdeğe, işlemleri fiziksel bellekten agresif bir şekilde takas etmesini ve önbellek takas ettirmesini bildirir

Değişkenliği kontrol etmek, değiş tokuşunuzu boşaltmak ve değiş tokuşu 0 olarak değiştirmek için temel talimatlar aşağıdadır:

Değişkenlik değerini kontrol etmek için:

cat /proc/sys/vm/swappiness

Değişimi geçici olarak 0'a ayarlamak için ( SpamapS tarafından önerildiği şekilde ):

Bu, takas işleminizi boşaltacak ve tüm takas işlemlerini belleğe geri aktaracaktır. Öncelikle, gnome-system-monitor'un kaynaklar sekmesini görüntüleyerek yeterli hafızanız olduğundan emin olun, boş hafızanız kullanılmış takas alanı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 kullanın.

Sudo swapoff --all

Yeni değeri 0 olarak ayarlamak için:

Sudo sysctl vm.swappiness=0 

Değişimi tekrar açmak için:

Sudo swapon --all

Değişkenliği kalıcı olarak 0'a ayarlamak için:

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

* Çekirdek sürümü 3.5+ ile 0 'a ayar değişebilirliği tamamen kapanır ve en düşük değişim algoritmasını istiyorsanız 1 ayarı önerilir. kaynak: https://www.percona.com/blog/2014/04/28/oom-relation-vm-swappiness0-new-kernel/

144
Elijah Lynn

Boşaltma takasının yavaş disk ve sınırlı RAM içeren sistemlerde çok yardımcı olabileceğini öğrendim. Elbette, daha önce de belirtildiği gibi, bunu yapmanın yolu Sudo swapoff -a; Sudo swapon -a komutunu çalıştırmaktır. Buradaki sorun, eğer yetersiz RAM varsa, bunu yapmak her türlü soruna yol açacaktır.

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

#!/bin/bash

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

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
53
Scott Severance

Birkaç gündür değiş tokuş ile uğraşmadan sonra, çekirdeğin kendi cihazlarına bırakılması gerektiği sonucuna vardım. Ne yaptığını bilir ve size en iyi deneyimi sunmak için optimize edilmiştir.

Bu diski geri almak için gerçekten iyi bir nedeniniz yoksa, bırakın.

26
Erigami

Takas alanınız doluysa performansı etkilemez. Tek performans cezası, eşyaların değiş tokuş edilebiliyor olmasıdır. Eğer hiçbir şey içeri girmiyor/değişmiyorsa, hiçbir şey için endişelenmenize gerek yoktur.

0
Rory