Bagaimana Anda mengosongkan buffer dan cache pada sistem Linux?

315

Sebelum melakukan beberapa pekerjaan pembandingan, bagaimana cara membebaskan memori (RAM) yang dikonsumsi Kernel Linux untuk buffer dan cache?


Perhatikan bahwa ini sebagian besar berguna untuk pembandingan. Mengosongkan buffer dan cache mengurangi kinerja! Jika Anda di sini karena Anda berpikir bahwa membebaskan buffer dan cache adalah hal yang positif, buka dan baca Linux memakan RAM saya! . Cerpen: memori bebas adalah memori yang tidak digunakan memori yang terbuang .

slm
sumber
1
Apa minat diri dalam tanya jawab terbuka? unix.stackexchange.com/questions/58553 / ... & unix.stackexchange.com/questions/17936/…
innocent-world
1
@ innocent-world - tidak pernah melihat ini ketika saya mencari, jadi sepertinya ada lubang di basis pengetahuan di situs ini, dan berusaha mengisinya.
slm
2
@ dunia tidak bersalah - dalam melihat 2 Q itu, saya pikir masih ada ruang untuk T&J ini. Yang ini bertindak sebagai Tanya Jawab kanonik di situs. Itu cukup spesifik dalam apa yang mereka bicarakan. Selain itu, ini menunjukkan informasi tentang menganalisis buffer & cache dan juga cara mengatur parameter menggunakan sudo. Tak satu pun dari 2 pertanyaan lainnya menjawab semua ini.
slm
Silakan baca artikel ini linuxatemyram.com Jika Anda memahami risikonya maka Anda dapat melakukan gratis && sinkronisasi && echo 3> / proc / sys / vm / drop_caches && gratis

Jawaban:

491

Mengosongkan cache buffer

Jika Anda ingin mengosongkannya, Anda dapat menggunakan rantai perintah ini.

# 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

Anda dapat memberi sinyal Kernel Linux untuk menjatuhkan berbagai aspek dari item yang di-cache dengan mengubah argumen numerik ke perintah di atas.

  • Untuk membebaskan pagecache:

    # echo 1 > /proc/sys/vm/drop_caches
    
  • Untuk membebaskan gigi dan inode:

    # echo 2 > /proc/sys/vm/drop_caches
    
  • Untuk membebaskan pagecache, gigi palsu, dan inode:

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

Di atas dimaksudkan untuk dijalankan sebagai root. Jika Anda mencoba melakukannya menggunakan sudomaka Anda perlu sedikit mengubah sintaks menjadi seperti ini:

$ 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'

CATATAN: Ada versi yang lebih esoteris dari perintah di atas jika Anda suka itu:

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

Mengapa perubahan dalam sintaksis? The /bin/echoProgram ini berjalan sebagai root, karena sudo, tetapi shell yang mengarahkan output gema untuk file akar-satunya masih berjalan seperti Anda. Shell Anda saat ini melakukan redirection sebelum sudo dimulai.

Melihat apa yang ada di buffer dan cache

Lihatlah linux-ftoolsjika Anda ingin menganalisis konten buffer & cache. Khususnya jika Anda ingin melihat file apa yang sedang di-cache.

fincore

Dengan alat ini Anda dapat melihat file apa yang sedang di-cache dalam direktori give.

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.

Sebagai contoh /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

Dengan output di atas Anda dapat melihat bahwa ada beberapa file * .MYD, * .MYI, dan * .frm yang saat ini sedang di-cache.

Menukar

Jika Anda ingin menghapus swap Anda, Anda dapat menggunakan perintah berikut.

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

Kemudian gunakan perintah ini untuk menonaktifkan swap:

$ swapoff -a

Anda dapat mengonfirmasi bahwa sekarang kosong:

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

Dan untuk mengaktifkannya kembali:

$ swapon -a

Dan sekarang konfirmasi ulang dengan free:

$ free
             total       used       free     shared    buffers     cached
Mem:       7987492    7785572     201920          0      41556     491508
-/+ buffers/cache:    7252508     734984
Swap:      5963772          0    5963772
slm
sumber
13
tidak pernah mendengar tentang linux-ftools setelah bertahun-tahun, meskipun saya tahu cara menjatuhkan cache. kamu benar-benar seorang guru. Terima kasih telah berbagi!
johnshen64
5
Hal-hal yang Anda katakan tentang sinkronisasi salah: menurut doc linux, menulis ke drop_cache hanya akan menghapus konten bersih (sudah disinkronkan). Selain itu, bahkan jika itu menjatuhkan data yang tidak disinkronkan, mengatakan bahwa mengetik perintah sinkronisasi tepat sebelum membersihkan cache akan menghemat data Anda salah: ada waktu yang tidak nol antara perintah sinkronisasi drop_cache tulis, sehingga data apa pun dapat ditambahkan selama selang waktu ini. Tidak ada atom di sini.
Congelli501
3
Saya mendapatkan informasi itu di sini: kernel.org/doc/Documentation/sysctl/vm.txt - "Ini adalah operasi yang tidak merusak dan tidak akan membebaskan benda kotor apa pun.". Ia juga mengatakan bahwa sinkronisasi dapat digunakan untuk meningkatkan ukuran cache yang jatuh (untuk cache writeback).
Congelli501
26
Lebih suka "sudo sysctl vm.drop_caches = 1" lebih dari "sudo sh -c 'echo 1> / proc / sys / vm / drop_caches'"
Raúl Salinas-Monteagudo
8
@slm saya suka menggunakan teeuntuk menulis sebagai root:echo 3 | sudo tee /proc/sys/vm/drop-caches
pqnet