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


314

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

Ancak, bu son uygulamadan çıktığımda, 2GB RAM boşaldı, ancak aynı takas alanı kullanımı kaldı.

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

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


En kolay şey cihazınızı yeniden başlatır ve ram ve serbest ram ile baş etme zamanından tasarruf edin, dizüstü bilgisayar ve işlemci sıcaklığından tasarruf edin
Mohamed Slama

5
Bilgisayarınızdaki tüm öğeleri yeniden çoğaltmanın bundan daha az zaman alacağı varsayımı.
jQwierdy

Ubuntu 16.04, en azından, ihtiyaç duyulduktan uzun bir süre sonra değiş tokuşu kullanmaya devam edebilir, böylece bir zorunluluk olmasa bile, takas dosyasına güvenerek sisteminizin büyüklük siparişlerini yavaşlatır. Bu nedenle manuel müdahale faydalı olabilir. Yeniden başlatma her zaman bir seçenek değildir.
Mat,

Yanıtlar:


167

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.

İçeri / dışarı herhangi bir şeyin geçip geçmediğini öğrenmek için vmstatkomutu 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 çalışan çıktı, vmstat 1makinemin hiç değişmediğini görebiliyorsunuz.

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 de burada topsizde görebildiğiniz takas alanım var: -

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

32
“Endişelenmek için bir neden yok”, değiştirilen bir uygulamayı kullanmaya devam ettiğim noktaya kadar. sonra tüm cehennem kırılıyor.
törzsmókus

207
Bu gönderi soruyu cevaplamıyor.
emchristiansen

18
Sorunun öncül yanılgılarına dayanmaktadır. Bu yayın kavram yanılgılarını giderir.
popey

30
Bir yanlış anlama görmüyorum, “kullanılmış” ın ne anlama geldiğiyle ilgili bir anlaşmazlık görüyorum. Aktif olarak içeri / dışarı kaydırmaya atıfta bulunmak için "kullanılmış" anlamına gelirsiniz, orijinal soru ise "kullanılmış" olarak göründüğü halde görünür, daha sonra geri getirilmesi gerekebilecek olan, değiştirilen verilerin olduğu anlamına gelir. Çok fazla bellek hafızası alan bir olaydan sonra takas işlemine son vermek için geçerli nedenler, kullanıcının daha sonra gerçekleşeceğini bildiği aktif takas işlemlerini önceden engellemek (özellikle daha sonraki “takas işlemlerinin” disk başka nedenlerden dolayı yük altında).
drfrogsplat

39
Yoğun bellek kullanan bir uygulamayı çalıştırdıktan sonra, büyük olasılıkla değiştirilme nedeniyle, onlara geçiş yaptığım zaman diğer uygulamalarım yanıt vermiyor. Sisteme, olabildiğince fazla veri değiştirmeyi (bir kahve molasının ardından) söylemenin bir yolu, her Alt + Tab tuşunda her seferinde 20 saniye beklemekten daha iyidir.
Mark K Cowan

423

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.


8
Bu numara yaptı, takas koç için kopyalandı. Sanırım takas çalıştırmadan önce en azından serbest ram olarak kullanılan takas miktarının olduğundan emin olmanız gerekiyor, değil mi?
jfoucher

12
Takas RAM'e kopyalanmadı. Sadece devre dışı bırakıldı. Bunu yapmadan önce kutunun değişmemesini sağlamalısınız. Bunu yaparsanız, çekirdek hafızanın kaybolduğunu görecek ve OOM-Killer muhtemelen uygulamaları keyfi bir şekilde öldürmeye başlayacaktır. Böyle bir takası 'temizlemeniz' gerekmiyor. (diğer
yorumuma

51
Aslında, takas, temel olarak, ram'a kopyalanır ya da daha doğru olarak, takas devre dışı bırakılmadan önce sayfalar diskten RAM'e geri alınır.
SpamapS

14
Sayfalar, yalnızca hala bir işlem için hala gerekliyse RAM'e kopyalanır. Bazen değiştirilmiş bir sayfa zaten bitmiş olan bir işleme aittir ve çekirdek bu sayfaları derhal takas etmekten kurtarmaz.
BrunoJCM

6
Takas edilen sayfaları RAM'e geri getirme ve ardından takas belleğini boşaltma yöntemi olduğu için bu doğru cevap olmalıdır
Alfonso Jiménez

144

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. Ubuntu 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 önerilir , 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!

Ubuntu 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.

Aşağıda takas kontrolü, takas tahliyesi ve takas tahlili 0 olarak değiştirilmesi ile ilgili temel talimatlar verilmiştir:

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/


1
Ben sadece değiş tokuş etmek için kalıcı bir yol içerecek şekilde cevabı güncelledim. Nasıl bu kadar sinirlendiğinden emin değilim, kimsenin test etmediğini tahmin ediyorum.
Elijah Lynn

1
Bu cevapta swappiness hakkında daha iyi bir okuma => askubuntu.com/a/103916/11929
Elijah Lynn

3
Yazar cevabı ilk gönderdiğinde bunun mevcut olup olmadığından emin değilim, ancak ubuntu sunucusunun kurulumu için "60" değerinde bir takas değeri mevcut olduğundan, bu ortamın performans için farklı özelliklere sahip olduğundan emin olabilirsiniz. help.ubuntu.com/community/…
Frito

1
Bu ayar, takas boyutunun kontrolünde çok etkilidir. Sistemimde 16G RAM ve 16G takas var. Bazen sanal makinelere gidiyorum ve bazı uygulamalarım değiştiriliyor. VM'leri kapattığımda RAM kullanımı düşüyor, ancak takas kullanımı aynı kalıyor ve uygulamaları değiştirirken sistemim aksıyor. Değişimin değişmesi benim için performansı arttırdı.
kapad

1
Bu gerçekten kabul edilen cevap olmalı. Sorunun kapsamlı bir açıklaması ve çözümü, aynı zamanda Swap hafızasını korumak için linkler ve bir çözüm olmakla birlikte, her şeyden önce kontrol altında kalmasına yardımcı olur. Harika şey. Teşekkürler. :)
Jack_Hu

53

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

toggle_swapSon birkaç yıldır benim için işe yarayan bir senaryo yazdım . Takası değiştirmeden önce yeterli boş RAM olup olmadığını 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

Müthiş böyle bir şey arıyordum. Belki biraz daha güvende olmak için sayıyı ve yüzdelerini sunabilir ve sonra kesinlikle emin olmanızı isteyebilirsiniz.
Atherion

2
Ben Kodu güncellemek ettik ve bir özü bazlı oluşturduk gist.github.com/Jekis/6c8fe9dfb999fa76479058e2d769ee5c
JeKIS

Bu, tüm ipuçlarını okuduktan sonra ulaştığım sonuçtur, biri takas öldürmeden önce gerçekten de yeterli RAM olduğundan emin olmalıdır. Teşekkürler efendim, harika senaryo. Varsayılan olarak Ubuntu'ya dahil edilmelidir (şaka yapmıyor, gerçekten bir zorunluluktur.)
Shiki

Bunun haricinde, takas kapatırken herhangi bir yeni şey çalıştırırsanız ve tekrar açmadan önce - yeterli hafızası olmayacaktır.
barteks2x

Bu ne kadar boş hafızaya sahip olduğunuza bağlıdır. Her şeyi değiş tokuş etmek ve yeni süreçte tutmak için yeterli boş hafıza varsa, o zaman sorun yok. Eğer değilse o zaman haklısın.
Scott Severance

25

Birkaç gün boyunca değiş tokuş etmek zorunda kaldıktan 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 istemek için gerçekten iyi bir nedeniniz yoksa, bırakın.


2
Takasta bazı şeyler vardı, vmstat takas ve takasın gerçekleştiğini gösterdi ve CPU zor kullandı. Yeterince iyi sebep yok mu?
Xerus

Masaüstünde belirli bir takasın laggy yaptığı kesin durumlar vardır. (Takas ederken değil, aynı zamanda, sonradan yeterli RAM olduğu zamandan sonra, uzun bir süre sonra.) Dolayısıyla, en iyi ihtimalle bu cevap sadece bazı durumlarda olan öznel deneyimdir.
Cray

-1

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.


10
Bir şey varsa Evet ama edilmektedir takas olma o gelmez , dolayısıyla bu soruyu performansını etkiler.
kuant

Bu gerçek bir saçmalıktır, genellikle büyük geri dönüş takasları HDD’lerdedir veya genellikle RAM’den daha yavaş bir cihazdadır - eğer alan biterse - var olan şeyler değiştirilir - örneğin internet tarayıcısı gibi - ve sonra pratik olarak daha yavaş cihazdan kullanırsınız. ..
jave.web
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.