Bir Linux sistemindeki tamponları ve önbelleği nasıl boşaltırsınız?


315

Bazı kıyaslama çalışmaları yapmadan önce Linux Çekirdeğinin tamponları ve önbelleği için harcadığı belleği (RAM) nasıl biri boşaltabilir?


Bunun çoğunlukla kıyaslama için faydalı olduğuna dikkat edin. Tamponları ve önbelleği boşaltmak performansı düşürür ! Eğer buradaysanız, arabellekleri ve önbelleği boşaltmanın olumlu bir şey olduğunu düşündüğünüz için, gidin ve Linux'un RAM'imden yediğini okuyun ! . Kısa hikaye: boş hafıza kullanılmayan hafıza boşa harcanır .


1
Açık dup soruya cevap verme ve kendine cevap verme nedir? unix.stackexchange.com/questions/58553/… & unix.stackexchange.com/questions/17936/…
masum dünya

1
@ masum-dünya - araştırırken bunları asla görmedim, bu yüzden bu sitedeki bilgi tabanında bir delik gibi görünüyordu ve onu doldurmaya çalışıyordu.
slm

2
@ masum-dünya - bu 2 soruya bakarken hala bu soru ve cevap için yer olduğunu düşünüyorum. Bu sitede bir kanonik soru-cevap gibi davranır. Bunlar neye hitap ettikleri konusunda oldukça spesifikler. Ek olarak bu, tamponların ve önbelleklerin analizi ve sudo kullanarak parametrelerin nasıl ayarlanacağı hakkında bilgiler gösterir. Diğer 2 sorunun hiçbiri bunlardan herhangi birini ele almamaktadır.
slm

Bu makaleyi okuyun linuxatemyram.com Eğer 3> / proc / sys / vm / drop_caches && serbest && sonra serbest && senkronizasyonu yapabilirsiniz riski anlamak yankı varsa

Yanıtlar:


491

Arabellek önbelleğini boşaltma

Boşaltmak istiyorsanız, bu komut dizisini kullanabilirsiniz.

# free && sync && echo 3 > /proc/sys/vm/drop_caches && free

             total       used       free     shared    buffers     cached
Mem:       1018916     980832      38084          0      46924     355764
-/+ buffers/cache:     578144     440772
Swap:      2064376        128    2064248
             total       used       free     shared    buffers     cached
Mem:       1018916     685008     333908          0        224     108252
-/+ buffers/cache:     576532     442384
Swap:      2064376        128    2064248

Sayısal argümanı yukarıdaki komuta değiştirerek önbelleklenmiş öğelerin çeşitli yönlerini bırakması için Linux Çekirdeğini işaret edebilirsiniz.

  • Sayfa önbelleğini boşaltmak için:

    # echo 1 > /proc/sys/vm/drop_caches
    
  • Dişçi ve inodeları serbest bırakmak için:

    # echo 2 > /proc/sys/vm/drop_caches
    
  • Sayfa önbelleğini, diş hekimlerini ve inode'ları serbest bırakmak için:

    # echo 3 > /proc/sys/vm/drop_caches
    

Yukarıdakilerin root olarak çalıştırılması amaçlanmıştır. Onları kullanarak yapmaya çalışıyorsanız sudo, sözdizimini biraz gibi bir şeyle değiştirmeniz gerekir:

$ sudo sh -c 'echo 1 >/proc/sys/vm/drop_caches'
$ sudo sh -c 'echo 2 >/proc/sys/vm/drop_caches'
$ sudo sh -c 'echo 3 >/proc/sys/vm/drop_caches'

NOT: Eğer öyleyseniz, yukarıdaki komutun daha ezoterik bir sürümü var:

$ echo "echo 1 > /proc/sys/vm/drop_caches" | sudo sh

Neden sözdizimindeki değişiklik? /bin/echoProgram nedeniyle, kökü olarak çalışan sudo, ancak kök salt dosyaya echo çıktısı yönlendirme oluyor kabuk hala senin kadar çalışıyor. Geçerli kabuğunuz başlamadan önce yönlendirmeyi yapar sudo.

Tampon ve önbellekte ne olduğunu görün

linux-ftoolsTampon ve önbellek içeriğini analiz etmek istiyorsanız bir göz atın . Özellikle hangi dosyaların o anda önbelleğe alındığını görmek istiyorsanız.

fincore

Bu araçla hangi dosyaların bir veri dizini içinde önbelleğe alındığını görebilirsiniz.

fincore [options] files...

  --pages=false      Do not print pages
  --summarize        When comparing multiple files, print a summary report
  --only-cached      Only print stats for files that are actually in cache.

Örneğin, /var/lib/mysql/blogindex:

root@xxxxxx:/var/lib/mysql/blogindex# fincore --pages=false --summarize --only-cached * 
stats for CLUSTER_LOG_2010_05_21.MYI: file size=93840384 , total pages=22910 , cached pages=1 , cached size=4096, cached perc=0.004365 
stats for CLUSTER_LOG_2010_05_22.MYI: file size=417792 , total pages=102 , cached pages=1 , cached size=4096, cached perc=0.980392 
stats for CLUSTER_LOG_2010_05_23.MYI: file size=826368 , total pages=201 , cached pages=1 , cached size=4096, cached perc=0.497512 
stats for CLUSTER_LOG_2010_05_24.MYI: file size=192512 , total pages=47 , cached pages=1 , cached size=4096, cached perc=2.127660 
stats for CLUSTER_LOG_2010_06_03.MYI: file size=345088 , total pages=84 , cached pages=43 , cached size=176128, cached perc=51.190476 
stats for CLUSTER_LOG_2010_06_04.MYD: file size=1478552 , total pages=360 , cached pages=97 , cached size=397312, cached perc=26.944444 
stats for CLUSTER_LOG_2010_06_04.MYI: file size=205824 , total pages=50 , cached pages=29 , cached size=118784, cached perc=58.000000 
stats for COMMENT_CONTENT_2010_06_03.MYI: file size=100051968 , total pages=24426 , cached pages=10253 , cached size=41996288, cached perc=41.975764 
stats for COMMENT_CONTENT_2010_06_04.MYD: file size=716369644 , total pages=174894 , cached pages=79821 , cached size=326946816, cached perc=45.639645 
stats for COMMENT_CONTENT_2010_06_04.MYI: file size=56832000 , total pages=13875 , cached pages=5365 , cached size=21975040, cached perc=38.666667 
stats for FEED_CONTENT_2010_06_03.MYI: file size=1001518080 , total pages=244511 , cached pages=98975 , cached size=405401600, cached perc=40.478751 
stats for FEED_CONTENT_2010_06_04.MYD: file size=9206385684 , total pages=2247652 , cached pages=1018661 , cached size=4172435456, cached perc=45.321117 
stats for FEED_CONTENT_2010_06_04.MYI: file size=638005248 , total pages=155763 , cached pages=52912 , cached size=216727552, cached perc=33.969556 
stats for FEED_CONTENT_2010_06_04.frm: file size=9840 , total pages=2 , cached pages=3 , cached size=12288, cached perc=150.000000 
stats for PERMALINK_CONTENT_2010_06_03.MYI: file size=1035290624 , total pages=252756 , cached pages=108563 , cached size=444674048, cached perc=42.951700 
stats for PERMALINK_CONTENT_2010_06_04.MYD: file size=55619712720 , total pages=13579031 , cached pages=6590322 , cached size=26993958912, cached perc=48.533080 
stats for PERMALINK_CONTENT_2010_06_04.MYI: file size=659397632 , total pages=160985 , cached pages=54304 , cached size=222429184, cached perc=33.732335 
stats for PERMALINK_CONTENT_2010_06_04.frm: file size=10156 , total pages=2 , cached pages=3 , cached size=12288, cached perc=150.000000 
---
total cached size: 32847278080

Yukarıdaki çıktıyla, şu anda önbelleğe alınmakta olan birkaç * .MYD, * .MYI ve * .frm dosyası olduğunu görebilirsiniz.

takas

Takas alanınızı silmek istiyorsanız, aşağıdaki komutları kullanabilirsiniz.

$ free
             total       used       free     shared    buffers     cached
Mem:       7987492    7298164     689328          0      30416     457936
-/+ buffers/cache:    6809812    1177680
Swap:      5963772     609452    5354320

Sonra takas devre dışı bırakmak için bu komutu kullanın:

$ swapoff -a

Şimdi boş olduğunu onaylayabilirsiniz:

$ free
             total       used       free     shared    buffers     cached
Mem:       7987492    7777912     209580          0      39332     489864
-/+ buffers/cache:    7248716     738776
Swap:            0          0          0

Ve yeniden etkinleştirmek için:

$ swapon -a

Ve şimdi ile onaylayın free:

$ free
             total       used       free     shared    buffers     cached
Mem:       7987492    7785572     201920          0      41556     491508
-/+ buffers/cache:    7252508     734984
Swap:      5963772          0    5963772

13
Ne kadar uzun zaman sonra linux-ftools 'u hiç duymamıştım. sen gerçekten bir gurusun. Paylaşım için teşekkürler!
johnshen64

5
Senkronizasyon hakkında söyledikleriniz yanlıştır: linux doc’a göre, drop_cache’ye yazma yalnızca temiz içeriği temizler (zaten senkronize edilmiştir). Ayrıca, eşitlenmemiş verileri bıraksa bile, eşitleme komutunu önbelleği temizlemeden hemen önce yazmak verilerin yanlış olacağını söyler: eşitleme komutu drop_cache yazma arasında sıfır olmayan bir süre vardır, bu nedenle bu zaman atlaması sırasında herhangi bir veri eklenebilir. Burada atomik bir şey yok.
Congelli501

3
Bu bilgiyi burada aldım: kernel.org/doc/Documentation/sysctl/vm.txt - "Bu tahribatsız bir işlemdir ve hiçbir kirli nesneyi serbest bırakmaz.". Ayrıca, senkronizasyonun, bırakılan önbellek boyutunu artırmak için kullanılabileceğini söylüyor (geri yazma önbellekleri için).
Congelli501

26
Üzerinde "sudo sysctl vm.drop_caches = 1" tercih "sudo sh -c 'eko 1> / proc / sys / vm / drop_caches'"
Raúl Salinas-Monteagudo

8
@slm teeroot olarak yazmayı kullanmayı seviyorum :echo 3 | sudo tee /proc/sys/vm/drop-caches
pqnet
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.