轉載: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環境遷移。