CentOS5.8 x86_64系統手動釋放內存

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


操做步驟:
後端

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

free -mbash

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

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

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

cat /proc/sys/vm/drop_caches

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


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

sync

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

echo 3 > /proc/sys/vm/drop_caches

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

sysctl -p

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

相關文章
相關標籤/搜索