Takas alanı bırakma


10

Bazen yeterli fiziksel bellek olmasına ve firefox kullanmasına rağmen, çekirdek örneğin firefox'u takasta tutmak niyetinde gibi görünüyor:

robert@rm:~> free -m
             total       used       free     shared    buffers     cached
Mem:          3009       1904       1104          0        109        679
-/+ buffers/cache:       1116       1892
Swap:         4102        885       3216

Çekirdeğe takas alanı bırakmasını ve kullanılabilir boş belleği kullanmasını bildiren bir komut var mı?


Güncelleme : Kısa vadede swapon / swapoff kullandığım halde, şimdi

sudo sysctl vm.swappiness=30

başka bir yanıtta önerildiği gibi ve çok iyi sonuçlar elde edin.

Yanıtlar:


2

Sen olabilir bir yapmakswapoff için root hakları gerekli olacak, -
Senin için bir sorun olmadığını tahmin ediyorum, ama.


15

Nik'in önerisini yapabilir ve takas kullanabilirsiniz . Ancak, "swappiness" ayarını yapmak için başka, daha zarif bir yol veya 2.6 çekirdeği çalıştıran sistemlerde çekirdeğin programları ne kadar agresif bir şekilde diske takas ettiği var.

Linux çekirdeği posta listelerinde çekirdeğin takas davranışı ile ilgili izlemesi gereken politika hakkında ateşli tartışmalar olmuştur . Sonuç olarak , 2.6 çekirdekte bu davranışı büyük ölçüde değiştirmemize izin veren bir yama var .

Swapoff / swapon komutlarını çalıştırdığınız gibi bunu yapmak için root ayrıcalıklarına ihtiyacınız olduğunu unutmayın.

Geçerli "swappiness" değeri / proc / sys / vm / swappiness dosyasında veya bu sysctl komutunu çalıştırarak denetlenebilir :

sudo sysctl vm.swappiness

"Takas" değerleri 0 (takas yok) ile 100 (diske mümkün olduğunca takas) arasında değişebilir . Ubuntu, varsayılan swappiness 60 olarak ayarlanmış olarak gönderilir.

Bunu bir oturum için değiştirmek için sysctl'i tekrar arayın ve kullanmak için bir swappiness değeri iletin:

sudo sysctl vm.swappiness=30

Ücretsiz yanı sıra , elbette bunu mükemmel htop veya iotop yardımcı programları ile yapmanın etkilerini izleyebilirsiniz .

Gördüğünüzü beğendiyseniz ve bu değeri yeniden başlatmalarda tutmak istiyorsanız , /etc/sysctl.conf dosyasına "vm.swappiness = 30" yerleştirin .

$ sudo sysctl vm.swappiness
vm.swappiness = 30
$ sudo sysctl vm.swappiness=40
vm.swappiness = 40
$ sudo sysctl vm.swappiness
vm.swappiness = 40
$ sudo tail /etc/sysctl.conf 
#net.ipv4.conf.all.accept_source_route = 0
#net.ipv6.conf.all.accept_source_route = 0
#
# Log Martian Packets
#net.ipv4.conf.all.log_martians = 1
#
# The contents of /proc/<pid>/maps and smaps files are only visible to 
# readers that are allowed to ptrace() the process
# kernel.maps_protect = 1
vm.swappiness=30

Makinenizde kabul edilebilir bir seviye değiştirme gerektiren bir tane bulana kadar farklı değerlerle oynayabilirsiniz.


Sysctl için +1. Farklı swappiness değerlerini denerken, doğrudan proc dosyasına yazabilirsiniz (echo "30"> / proc / sys / vm / swappiness). Bu değişiklikler geçicidir ve /etc/sysctl.conf dosyasına yazılmaz. Ayarlardan memnun olduğunuzda, 'kalıcı' bir değişiklik yapmak için sysctl kullanın.
Shawn Chin

6

Takastaki şeylerin o zamandan daha yoğun bir zamana konduğunu unutmayın.

Verilerin de RAM'de olduğunu görebilirsiniz - kullanım için geri yüklendi, ancak takastan silinmedi. Çekirdek bir sonraki yoğun dönemde zaman kazanmak için bunu yapar - eğer veri zaten kopyalanmışsa, önce disk yazma yapmak yerine kullandığı RAM'i serbest bırakabilir. Bu nedenle , makinenin yakın gelecekte tekrar değiştirmeye gerek duymayacağını bilmediğiniz sürece , takas alanının serbest kalmasını zorlamak, bir dahaki sefer takas gerektiğinde işleri yavaşlatmak dışında hiçbir şey başaramaz.

Bu, yazma üzerine silme esasına göre yönetilir, bu nedenle RAM'deki kopya güncellenirse takastaki bloklar serbest bırakılır.

Takas alanı, şu anda bol miktarda ücretsiz olduğunuz gibi olmayacak başka bir şey için gerekiyorsa, elbette bu kullanım için serbest bırakılacaktır.

Bu durumda (hem takas alanlarındaki disk tabanlı sayfalarda hem de RAM'de) ne kadar veri bulunduğunu göremezsiniz free. /procÖzel dosya sistemi üzerinden de görebilirsiniz . Çıkışında bak cat /proc/meminfoiçin SwapCachedsayım.

Görünüşe göre yedek bellek varken kullanımda olan takas olmasının bir diğer iki nedeni

  • ağır G / Ç yükü altında çekirdek, çağlar boyunca kullanılmayan sayfaların daha iyi bir şekilde değiştirilmesine karar verdi, böylece önbellek / tamponlar için RAM'i kullanabilir, ancak freeburada sizin için durum böyle olmayabilir. gerçekten ayrılmamış RAM yığınının yanı sıra IO önbellek / arabellekleri tarafından kullanılan bir yığın var.
  • sayfalar bir nedenden dolayı daha önce değiştirildi ve bir daha ihtiyaç duyulmadı çünkü belki de bir süredir etkin olmayan bir işlem tarafından kullanılan bellektir. Bu durumda takasın serbest bırakılması (böylece sayfaları RAM'e geri yüklemek), bir dahaki sefere uykudan başka bir şey yapılması gerektiğinde bu işlemin yanıt süresini artırabilir, ancak bir süredir etkin değilse, zaten gerekli olmayabilir yakın gelecekte herhangi bir zamanda.

1
Mükemmel bir açıklama için +1. FYI, vmstat verilerin tümünü değil / proc / meminfo ile görmenizi sağlar.

1

Bunun freebellek kullanımının sadece bir anlık görüntüsü olduğunu unutmayın . Gördüğünüz sonuç, geçmişte bir noktada sistemin RAM'i bu kadar değiştirmiş olduğu RAM'de yerleşik malzeme olduğunu gösteriyor olabilir. O zamandan beri RAM serbest kalmıştır, ancak takastaki malzeme gerekli değildir, bu nedenle RAM'i sadece karıştırmak yerine takasta tutulur. Bu durumda, takasın kapatılması kötü bir fikir olacaktır. Son yeniden yüklemeden bu yana bu kadar büyük miktarda RAM gerektirebilecek işlemler var mı?

Ek olarak, ulimit aracılığıyla ayarlanan maksimum yerleşik boyutunda bir kısıtlama olup olmadığını kontrol etmek isteyebilirsiniz (genellikle / etc / profile'de olabilir, ancak dağıtımlara göre değişebilir ve işlem başına ayarlanabilir (örneğin bir başlatma komut dosyasında). ).

Son olarak, Microsoft Windows'da Firefox'un diske takılmasıyla ilgili belirli sorunlara ilişkin raporlar vardır, örn. Simge durumuna küçültüldüğünde (örn. http://joeabiraad.com/mozilla-firefox/control-your-firefox-ram-usage/113 ). Bunu GNU / Linux sistemlerinde duymadım ama keşfetmeye değer olabilir.


Cevap için teşekkürler. Benim sorunum, takasın kullanılması değil, şu anda aktif programlar, örneğin halsiz hisseden Firefox ve Thunderbird için kullanılıyor olması. Bir takas / takas onları tekrar çabuk hissettirdi.
Robert Munteanu
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.