CentOS x86_64系統手動釋放內存

轉載:http://www.javashuo.com/article/p-bmnhzphi-ek.html node


線上集羣后端某臺Web服務器例行檢查時,我觀察到+buffers/cache值(即Linux內存的實際使用狀況)一直都是5365左右,就算停掉Nginx+FastCGI程序和其它程序也是同樣,考慮到這臺機器常常在使用rsync+inotify,確定會存在着頻繁存取文件的狀況。而Linux系統有一個特性:在Linux下頻繁存取文件時,就會佔用物理內存。當程序結束時並不會自動釋放被佔用的內存,而是一直做爲Cache存在。實際上內核結束一個程序後,它是會釋放內存的,可是內核並無馬上將這部分收集到free當中,而是存在在cached或者buffer當中,提升系統的io效率,cache和buffered的內存是由內核進行動態的配置管理,若是系統的free大小不夠的時候,系統會自動釋放cache buffer的內存給程序使用(所以若是是看到used不少,來手動釋放內存實際上是不須要的,我前面的文章及書籍其實也說明了咱們應該如何觀察Linux系統的實際內存使用狀況,這裏就再也不多描述了)。web


操做步驟:
後端

一、查詢當前內存使用狀況和釋放緩存的參數緩存

free -mbash

命令結果如示所示:服務器

1
2
3
4
              total       used        free      shared    buffers     cached
Mem:         10988       6792       4196          0        168       1001
-/+ buffers /cache :       5622       5365
Swap:         4295          0       4295


查看釋放緩存參數的命令,以下所示:app

1
cat  /proc/sys/vm/drop_caches

系統默認顯示爲0,0爲默認值,即表示不釋放。ide


二、使用sync命令,將系統緩存區中的髒數據寫入磁盤中,包括已修改的i-node、已延遲的塊I/O和讀寫映射文件,命令以下:spa

1
sync

三、配置文件/proc/sys/vm/drop_caches中記錄了緩存釋放的參數,命令以下:
code

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

四、不重啓機器使配置改生效,命令以下:

1
sysctl -p

執行以上操做之後, +buffers/cache值由5365漲到了9500,這個值就恢復正常了。不過我的以爲Linux系統(尤爲是CentOS系統)管理內存的方式實際上是很優異的,不少時候並不須要手動釋放內存;另外,工做中感受rsync+inotify的方式仍是存在着不少缺陷,正在慢慢將其往rsync+puppet環境遷移。

相關文章
相關標籤/搜索