linux記憶體cached釋放

2021-07-10 13:22:12 字數 1720 閱讀 2368

我們用free命令檢視系統記憶體使用情況的時候會發現:

#free -m

total       used       free     shared    buffers     cachedmem:         24359      11240      13119          0          0      10706-/+ buffers/cache:        533      23826swap:         4095          0       4095

1、total = used + free

2、cached比較大,甚至我遇見過記憶體剩餘只有7m的情況,這個時候cached非常大,基本上接近等於total了,這個時候開啟檔案或者傳輸檔案的時候可用記憶體很小,程式可能就會用到交換分割槽swap了,所以會發現機器速度變慢的情況

cached主要負責快取檔案使用, 日誌檔案過大造成cached區記憶體增大把記憶體占用完

.free中的buffer和cache:(它們都是占用記憶體):

buffer : 作為buffer cache的記憶體,是塊裝置的讀寫緩衝區

cache: 作為page cache的記憶體, 檔案系統的cache

如果 cache 的值很大,說明cache住的檔案數很多。

為了提高磁碟訪問效率, 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_caches

經常使用rsync傳輸大量資料的朋友可能遇到過類似的情況:開始是傳輸大量檔案過去,到後來傳輸的資料並不大,但就是很慢很慢,到對邊的伺服器上看會發現在終端輸入命令都不會覺得慢,但看記憶體使用情況時,發現free的記憶體很少,幾乎接近零了,我覺得可能就是記憶體都被cached了導致的

為什麼我們要釋放掉cached記憶體?因為我們用rsync傳輸大量資料的時候,linux系統將一部分檔案的資訊快取在記憶體中,這樣是可以減少頻繁使用的檔案的磁碟io時間占用,當我們傳完一批檔案後,我們要傳輸另外一批檔案過去,是完全不同的檔案或者檔案的內容發生了變化,記憶體中快取的檔案也不是我們需要的了,我們需要清空快取,騰出記憶體用來傳輸下一批檔案使用,這個時候我們急切的需要看到更多的記憶體是free狀態的。

在這樣的前提下,我們有必要自己手動清空快取,騰出更多可用記憶體來

注意:在清空快取前我們需要在linux系統中執行一下sync命令,將快取中的未被寫入磁碟的內容寫到磁碟上

其它介紹請參考:

**: 

linux記憶體cached釋放

linux記憶體cached釋放 我們用free命令檢視系統記憶體使用情況的時候會發現 free m 1 total used free 2 cached比較大,甚至我遇見過記憶體剩餘只有7m的情況,這個時候cached非常大,基本上接近等於total了,這個時候開啟檔案或者傳輸檔案的時候可用記憶體...

linux記憶體cached釋放

我們用free命令檢視系統記憶體使用情況的時候會發現 free m total used free shared buffers cached mem 24359 11240 13119 0 0 10706 buffers cache 533 23826 swap 4095 0 4095 1 tot...

Linux 釋放cached記憶體

使用free m 檢視系統使用的記憶體情況 free m total used free shared buffers cached mem 7871 7060 811 0 153 5278 buffers cache 1629 6242 swap 8191 16 8175 可以看到cached部分...