linux內存cached釋放

http://blog.csdn.net/blade2001/article/details/8990571

我們用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服務器Cache佔用過多內存導致系統內存不足問題的排查解決

網址: http://www.cnblogs.com/panfeng412/archive/2013/12/10/drop-caches-under-linux-system.html



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章