Takas işleminin tümünün RAM doluyken geçici bir depolama güvenliği ağı gibi davranmak olduğunu düşündüm, ancak takas bölümüm bazen 3GB kadar boş RAM'im olsa bile sürekli kullanılıyor. Bu normal mi?
Takas işleminin tümünün RAM doluyken geçici bir depolama güvenliği ağı gibi davranmak olduğunu düşündüm, ancak takas bölümüm bazen 3GB kadar boş RAM'im olsa bile sürekli kullanılıyor. Bu normal mi?
Yanıtlar:
"Takas" değerinizi değiştirmeyi deneyebilirsiniz:
Gönderen Ubuntu'nun Takas SSS :
Değişmezlik nedir ve nasıl değiştiririm?
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.
swappiness 0 ile 100 arasında bir değere sahip olabilir
swappiness = 0, çekirdeğe, işlemleri fiziksel bellekten mümkün olduğunca uzun süre değiştirmekten kaçınmasını söyler. Çekirdek 3.5 ve daha yeni sürümler için takas özelliğini devre dışı bırakır.
swappiness = 100, çekirdeğe, işlemleri fiziksel bellekten agresif bir şekilde takas etmesini ve önbellek takas ettirmesini bildirir.
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. Not: Ubuntu sunucu kurulumlarının masaüstü sistemlere göre farklı performans gereksinimleri vardır ve 60'ın varsayılan değeri muhtemelen daha uygundur.
Değişim değerini kontrol etmek
cat /proc/sys/vm/swappiness
Değişkenlik değerini değiştirmek için Değişkenlik değeri 10 olan geçici bir değişiklik (yeniden başlatıldığında kaybedilen) 10
sudo sysctl vm.swappiness=10
Bir değişikliği kalıcı hale getirmek için , en sevdiğiniz editör ile yapılandırma dosyasını düzenleyin:
gksudo gedit /etc/sysctl.conf
Vm.swappiness ifadesini arayın ve değerini istediğiniz gibi değiştirin. Vm.swappiness yoksa, dosyayı sonuna gibi ekleyin:
vm.swappiness=10
Dosyayı kaydedin ve yeniden başlatın.
Ayrıca kontrol edebilirsiniz: https://askubuntu.com/a/103916/54187
sudo sysctl --load=/etc/sysctl.conf
Değişiklikleri uygulamak için dosyayı düzenledikten sonra çalıştırın
Sorunuzun birkaç farklı yönü var.
Öncelikle, "özgür" tanımınız nedir. Aslında Linux'ta (veya herhangi bir modern işletim sisteminde) göründüğü kadar basit değildir.
Linux RAM nasıl kullanır (çok basitleştirilmiş)
Her uygulama hafızanızın bir kısmını kullanabilir. Linux boş kalan tüm belleği (son birkaç Mb hariç) "önbellek" olarak kullanır. Bu, sayfa önbelleğini, inode önbelleklerini vb. İçerir. Bu iyi bir şeydir - yığın yığınlarını hızlandırmaya yardımcı olur. Hem diske yazma hem de diskten okuma, büyük ölçüde önbellekle hızlandırılabilir.
İdeal olarak, tüm uygulamalarınız için yeterli belleğe sahip olursunuz ve önbellek için hala birkaç yüz Mb kalmış demektir. Bu durumda, uygulamalarınız hafıza kullanımlarını arttırmadığı ve sistem önbellek için yeterli alan almadığı sürece, herhangi bir takas işlemine gerek kalmaz.
Uygulamalar daha fazla RAM talep ettiğinde, önbellek küçülterek önbellek tarafından kullanılan alanın bir kısmına girer. Önbelleği ayırmak, basit ve gerçek zamanlı olarak yapılabilecek kadar ucuz ve kolaydır - önbellekte yer alan her şey, zaten diskte olan bir şeyin ikinci bir kopyasıdır, bu nedenle anında tahsis edilebilir veya Zaten önümüzdeki birkaç saniye içinde diske temizlemek zorunda kaldı .
Bu Linux'a özgü bir durum değildir - tüm modern işletim sistemleri bu şekilde çalışır. Farklı işletim sistemleri yalnızca farklı RAM'leri farklı rapor edebilir: bazıları önbelleği "özgür" olarak gördüklerinin bir parçası olarak içerir, bazıları ise olmayabilir.
Boş RAM hakkında konuşurken , önbellek eklemek çok daha anlamlı çünkü pratikte ücretsiz - herhangi bir uygulamanın talep etmesi durumunda kullanılabilir. Linux'ta free
komut her iki yolu da bildirir - ilk satır kullanılan RAM sütununda önbellek içerir, ikinci satır ise boş sütunda önbellek (ve tamponlar) içerir.
Linux nasıl takas kullanıyor (daha da basitleştirilmiş)
Düzgün çalışan bir önbellek için yeterli alan kalmadığında yeterli miktarda bellek kullandığınızda, Linux kullanılmayan uygulama hafızasını RAM'den değiştirilebilir duruma getirmeye karar verebilir.
Bunu kesin bir kesime göre yapmaz. Belirli bir tahsisat yüzdesine ulaşmak gibi değil, sonra Linux değişmeye başlar. Oldukça "bulanık" bir algoritması var. En çok "hafıza tahsisi için ne kadar baskı var" ile tanımlanabilecek birçok şeyi dikkate alır. Yeni bellek tahsis etmek için çok fazla "baskı" varsa, o zaman daha fazla yer açmak için bazılarının değişme olasılığı artacaktır. Daha az "baskı" varsa, bu şansı azaltacaktır.
Sisteminizde, bu "baskının" nasıl hesaplanacağını ayarlamanıza yardımcı olacak bir "takas" ayarı vardır. Normalde bunu tamamen değiştirmeniz tavsiye edilmez ve değiştirmenizi tavsiye etmem. Değişim genel olarak çok iyi bir şey - performansa zarar verdiği birkaç yeni durum olmasına rağmen, genel sistem performansına bakarsanız, çok çeşitli görevler için net bir avantajdır. Değişimi azaltırsanız, önbellek miktarının, gerçekten yararlı olsa bile, diğerlerinden biraz daha fazla küçülmesine izin verirsiniz. Bunun değiş tokuşla ilgili sorunlarınız için yeterince iyi bir takas olup olmadığı size bağlıdır. Sadece ne yaptığını bilmelisin, hepsi bu.
Bir takasın bir masaüstü sistemindeki algılanan performansı gerçekten zedelediği ve uygulamaların uzun süre boşta kaldıktan ve arka plan işlemlerini IO'da ağır tuttuktan sonra kullanıcı girişine tekrar cevap verebildiği iyi bilinen bir durum vardır (örneğin, gecede yedekleme). Bu çok göze çarpan bir durgunluk, ancak tüm işletim sistemlerinde değiş tokuşun bir arada yapılmasının gerekçesini haklı çıkarmak için yeterli değil. Değişimi kapatın ve yedekleme / virüs taramasından sonra ortaya çıkan bu başlangıç durgunluğu olmayabilir, ancak sistem gün boyu biraz daha yavaş çalışabilir. Bu da Linux ile sınırlı bir durum değil.
Neyin diske değiştirileceğini seçerken, sistem aslında kullanılmayan bir bellek almaya çalışır - okunan veya yazılan. Bunu çoğu zaman iyi seçen bir hesaplama için oldukça basit bir algoritması vardır.
Çok miktarda RAM'e sahip olduğunuz bir sisteminiz varsa (yazma sırasında, 8GB tipik bir Linux dağıtımı için çok büyük bir miktar), o zaman çok nadiren takas uygulamasının gerektiği bir duruma varacaksınız. Takası kapatmayı bile deneyebilirsiniz. Bunu yapmayı asla tavsiye etmiyorum, ancak yalnızca daha fazla RAM'in bazı uygulamaların çökmesinden ne zaman kurtaracağını asla bilemeyeceğiniz için. Ama ihtiyacın olmayacağını biliyorsan, yapabilirsin .
Peki takas sistemimi nasıl hızlandırabilir? Yavaş yavaş şeyler değişmiyor mu?
RAM'den takas için veri aktarma işlemi yavaş bir işlemdir, ancak yalnızca çekirdeğin genel faydadan daha ağır çıkacağından emin olması durumunda alınır. Örneğin, uygulama hafızanız neredeyse hiç önbellek kalmadıysanız ve G / Ç’niz bu nedenle çok verimsiz hale gelmişse, aslında biraz hafıza boşaltarak sisteminizden daha fazla hız alabilirsiniz. Verilerin serbest bırakılması için ilk takas işleminden sonra.
Aynı zamanda, uygulamalarınızın gerçekte olduğundan daha fazla bellek talep etmesi durumunda da son çaredir . Bu durumda, bir uygulamanın çökmesine veya zorla öldürülmek zorunda kalmasına neden olacak bir bellek yetersizliği durumunun önlenmesi için değiştirme gereklidir.
Değiştirme, yalnızca sisteminizin düşük performans gösterdiği zamanlarla ilişkilidir , çünkü kullanılabilir RAM kullanmıyorsanız, bu durum sisteminizi yavaşlatır (ya da kararsız hale getirir) olmasa bile sisteminizin yavaşlamasına neden olur. Bu yüzden işleri kolaylaştırmak için takas etme gerçekleşir çünkü sisteminiz tersine değil, tıkanmaya başlamıştır.
Veri takas edildiğinde, tekrar ne zaman çıkıyor?
Verileri değiş tokuş dışına aktarmak (en azından geleneksel sabit diskler için), onu koymak kadar zaman alıcıdır. Bu yüzden anlaşılır bir şekilde, çekirdeğiniz, özellikle gerçekte kullanılmıyorsa (yani okuma veya yazma) verileri takastan çıkarmak için isteksiz olacaktır. Eğer takas verileri var ve bu kullanılan değilse, o zaman başka şeyler için daha fazla bellek bırakır çünkü, takas kalmasını aslında iyi bir şey vardır potansiyel sistemi hızlandırmak, kullanılmakta olan.
free -m
.
Değişkenlik değerini ayarlamak her durumda işe yaramaz. İşe yararsa, harika. Değilse, takas işlemlerini kapatıp tekrar açarak düzenli aralıklarla temizlemek için bir komut dosyası yazdım.
Dikkatli olmazsanız takas değiştirmek biraz risklidir. RAM her şeyi tutmak için yeterli boş RAM yoksa artı takas sistem yanıt veremez duruma gelmesine neden olacaktır devre dışı bırakmaya çalışıyor, takas her şey. Komutum ilk önce yeterli boş RAM olup olmadığını kontrol eder (ki bu işlem, gerçek boş RAM miktarı, ücretsiz free
raporlananlardan farklıdır ), sonra sadece eğer öyleyse değiştirir. Ancak, eğer RAM'de biraz kısaysanız, script çalışırken başka bir önemli işleme başlamayın. İşte burada:
#!/bin/bash
# Make sure that all text is parsed in the same language
export LC_MESSAGES=en_US.UTF-8
export LC_COLLATE=en_US.UTF-8
export LANG=en_US.utf8
export LANGUAGE=en_US:en
export LC_CTYPE=en_US.UTF-8
# Calculate how much memory and swap is free
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)"
# Do the work
if [[ $used_swap -eq 0 ]]; then
echo "Congratulations! No swap is in use."
elif [[ $used_swap -lt $total_free ]]; then
echo "Freeing swap..."
swapoff -a
swapon -a
else
echo "Not enough free memory. Exiting."
exit 1
fi
Bu betiği root olarak çalıştırmalısınız (örneğin, ile sudo
). Bu komut dosyası sisteminizi yanıt vermiyor; Eğer yetersiz RAM varsa, takas değiştirmeyi reddeder. Bu senaryoyu beş yıla yakın bir süredir problemsiz kullandım.
Genellikle takas günümüzde sistemlerde kullanılmamaktadır. Tecrübelerime göre, yoğun operasyonlar olmadan uzun süredir devam eden işlemler, linux tarafından değiş tokuş ediliyor.
Birkaç etkilenen programın yavaş çalışmasını sağlar.
: Özgür ram sürü varsa, komutu çalıştırarak takas kapanabilir
swapoff -av
(ihtiyacınız sudo
bunun için hak.)
Kapalı takas beğenmezseniz, sen simetrik komutunu kullanarak, bunu devreye girebilir:
swapon -av
( tekrar sudo
gerekli).
Bir program için takas bir kez kullanıldığında, programın ömrü boyunca haritalanmış kalma eğilimindedir. Birçok program, nadiren kullanılan kodlara (ve verilere) sahiptir. Bellek değiştirildikten sonra, değiştirilemez.
Bu sayfaları belleğe zorlamanın bir yolu takas cihazını kapatmaktır. Eğer iki tane varsa, birini kapatabilir, tekrar açıp ikincisini kapatabilirsiniz. Eğer takas gerçekten gerekliyse, cihazlar arasında hareket edecektir. Takas cihazını (veya dosyayı) kapatabilirsiniz, ancak gerçekten takas alanına ihtiyacınız varsa ciddi şeyler olabilir.
Hafızadaki normal şeylerin yanı sıra, tempfs takas alanı kullanır ve kalan hafıza gibi değiş tokuş eder. Çok fazla geçici disk gerektiren bir şey çalıştırırsanız, sayfaların değişmesine neden olabilir. Oluşturulduktan sonra temp dosyaları artık birkaç dakika sonra kullanılamaz ve takas cihazına taşınacak iyi adaylardır.
Bir tutam içinde bir dosyayı takas aygıtı olarak kullanabilirsiniz. Bu, geçici olarak fazladan takas alanına ihtiyaç duyduğunuzda faydalıdır.
Ben düzenlenmiş Scott Kıdem senaryoyu zaten mevcut toplam bellek alanını kapsar ücretsiz yeni sürümlerini eşleşecek.
#!/bin/bash
free_mem="$(free | grep 'Mem:' | awk '{print $7}')"
used_swap="$(free | grep 'Swap:' | awk '{print $3}')"
echo -e "Free memory:\t$free_mem kB ($((free_mem / 1024)) MiB)\nUsed swap:\t$used_swap kB ($((used_swap / 1024)) MiB)"
if [[ $used_swap -eq 0 ]]; then
echo "Congratulations! No swap is in use."
elif [[ $used_swap -lt $free_mem ]]; then
echo "Freeing swap..."
sudo swapoff -a
sudo swapon -a
else
echo "Not enough free memory. Exiting."
exit 1
fi
free -m
,top -b 1