天天看點

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系統的實際記憶體使用情況,這裡就不再多描述了)。

操作步驟:

1、查詢目前記憶體使用情況和釋放緩存的參數

free -m

指令結果如示所示:

1

2

3

4

<code>             </code><code>total       used       </code><code>free</code>     <code>shared    buffers     cached</code>

<code>Mem:         10988       6792       4196          0        168       1001</code>

<code>-/+ buffers</code><code>/cache</code><code>:       5622       5365</code>

<code>Swap:         4295          0       4295</code>

檢視釋放緩存參數的指令,如下所示:

<code>cat</code> <code>/proc/sys/vm/drop_caches</code>

系統預設顯示為0,0為預設值,即表示不釋放。

2、使用sync指令,将系統緩存區中的髒資料寫入磁盤中,包括已修改的i-node、已延遲的塊I/O和讀寫映射檔案,指令如下:

<code>sync</code>

3、配置檔案/proc/sys/vm/drop_caches中記錄了緩存釋放的參數,指令如下:

<code>echo</code> <code>3 &gt; </code><code>/proc/sys/vm/drop_caches</code>

4、不重新開機機器使配置改生效,指令如下:

<code>sysctl -p</code>

執行以上操作以後, +buffers/cache值由5365漲到了9500,這個值就恢複正常了。不過個人覺得Linux系統(尤其是CentOS系統)管理記憶體的方式其實是很優異的,很多時候并不需要手動釋放記憶體;另外,工作中感覺rsync+inotify的方式還是存在着很多缺陷,正在慢慢将其往rsync+puppet環境遷移。

本文轉自 撫琴煮酒 51CTO部落格,原文連結:http://blog.51cto.com/yuhongchun/1430026,如需轉載請自行聯系原作者

繼續閱讀