free命令-linux內存cached釋放

在工做中常常會遇到Linux內存很大,卻被cached佔了大部分的內存空間,致使linux開始啓用swap的狀況。node

馬哥教育關於linux內存的文章,一看就懂:https://mp.weixin.qq.com/s/VoRiJpmcYZptLumuT-N-wAlinux

下圖就是這樣狀況:緩存

    總內存有128G,cached佔用了108G,形成系統不得不使用swap內存,而致使性能降低,速度變慢
服務器

     wKiom1nMkDHSeihvAAAYMFPk230424.png

buffer,cached的做用:app

     cached主要負責緩存文件使用, 日誌文件過大形成cached區內存增大把內存佔用完 .
     Free中的buffer和cache:(它們都是佔用內存):
     buffer : 做爲buffer cache的內存,是塊設備(磁盤)的緩衝區,包括讀、寫磁盤
     cache: 做爲page cache的內存, 文件系統的cache,包括讀、寫文件
     若是 cache 的值很大,說明cache住的文件數不少。


ide

     爲了提升磁盤存取效率, Linux作了一些精心的設計, 除了對dentry進行緩存(用於VFS,加速文件路徑名到inode的轉換), 還採起了兩種主要Cache方式:Buffer Cache和Page Cache。前者針對磁盤塊的讀寫,後者針對文件inode的讀寫。這些Cache有效縮短了 I/O系統調用(好比read,write,getdents)的時間。性能


如何解決這個致使機器變慢的問題呢?
罪魁禍首就是內存都被cached了,free的基本沒有了
因此咱們應該想一想如何把cached內存釋放出來
重啓機器確定是能夠解決,可是咱們確定是不能用這樣的辦法
 
釋放方法有三種(系統默認值是0,釋放以後你須要再改回0值):
    To free pagecache:  echo 1 > /proc/sys/vm/drop_caches
    To free dentries and inodes:  echo 2 > /proc/sys/vm/drop_caches
    To free pagecache, dentries and inodes:  echo 3 > /proc/sys/vm/drop_cachesspa

    經常使用方法是:echo 1 > /proc/sys/vm/drop_caches設計

    執行上面的命令,能夠釋放了大概40G的cached空間
日誌

     wKioL1nMk_myh8MHAAAYp4hcr1o225.png

常常使用rsync傳輸大量數據的朋友可能遇到過相似的狀況:開始是傳輸大量文件過去,到後來傳輸的數據並不大,但就是很慢很慢,到對邊的服務器上看會發如今終端輸入命令都不會以爲慢,但看內存使用狀況時,發現free的內存不多,幾乎接近零了,我以爲可能就是內存都被cached了致使的
 
爲何咱們要釋放掉cached內存?由於咱們用rsync傳輸大量數據的時候,linux系統將一部分文件的信息緩存在內存中,這樣是能夠減小頻繁使用的文件的磁盤IO時間佔用,當咱們傳完一批文件後,咱們要傳輸另一批文件過去,是徹底不一樣的文件或者文件的內容發生了變化,內存中緩存的文件也不是咱們須要的了,咱們須要清空緩存,騰出內存用來傳輸下一批文件使用,這個時候咱們急切的須要看到更多的內存是free狀態的。
 
在這樣的前提下,咱們有必要本身手動清空緩存,騰出更多可用內存來
 
注意:在清空緩存前咱們須要在linux系統中執行一下sync命令,將緩存中的未被寫入磁盤的內容寫到磁盤上

除了釋放掉cached內存之外,還須要設置vm.swappiness的值,以盡大限度的使用物理內存

    查看vm.swappiness參數的值:

        #sysctl -q vm.swappiness

    臨時設置vm.swappiness的值(重啓後生效)

        #sysctl vm.swappiness=10

    永久設置vm.swappiness:

        echo "vm.swappiness = 10" >> /etc/sysctl.conf

相關文章
相關標籤/搜索