[[email protected] ~]# free
total used free shared buffers cached
Mem: 3924792 2390256 1534536 0 372432 1623832
-/+ buffers/cache: 393992 3530800
Swap: 7574520 0 7574520
1 free的輸出解釋
預設記憶體機關是KB。
第一行時标題,第二行是作業系統對機器實體記憶體使用情況的認識,第三行是一個程序對機器實體記憶體使用情況的認識,第四行是交換分區使用情況。
先看第2行
目前機器的實體記憶體(total)共有:3924792KB;
其中(used)已經使用了2390256KB;
還有1534536KB是(free)空閑的。
顯然total=used+free。
shared是為了相容輸出格式而保留的一個遺留項,現在已經沒有意義,始終為0,不必追究。
buffers是作業系統為了提高IO性能而把一些要寫到硬碟上的資料緩存到記憶體中,這部分記憶體的大小就是buffers。
cached與buffers類似,隻是緩存的是從硬碟讀取的資料。
第3行,是程式可以使用的記憶體情況,因為作業系統随時可以把buffers中的資料寫入硬碟然後釋放這部分記憶體,也可以随時把cahced的記憶體部分釋放,是以這兩部分記憶體隻是為了提高性能,不是必須的。從一個一個程序角度來看,可以忽略這兩部分的存在,第三行就是從一個程序角度看到的實體記憶體使用情況,也就是把buffers和cached這兩部分當做是空閑可用的來看待。
第4行,是交換分區的使用情況,當實體記憶體不充足時,才會使用交換分區,無需再解釋。
2 手動釋放buffers和cached記憶體
釋放buffers前一定記得使用sync把未寫入硬碟的資料更新到硬碟,防止資料丢失。
#sync
#echo 3 > /proc/sys/vm/drop_caches
我們看看釋放後的效果:
[[email protected] ~]# echo 3 > /proc/sys/vm/drop_caches
[[email protected] ~]# free -m
total used free shared buffers cached
Mem: 3832 299 3533 0 0 23
-/+ buffers/cache: 275 3557
Swap: 7396 0 7396
可以看到,buffers被完全釋放了,cached可能還有一部分無法釋放。
/proc/sys/vm/drop_caches是個開關,設定其内容就可以控制核心對緩存的處理,具體含義如下:
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
需要說明的是,除非特殊情況,不需要手動清理緩存,應該讓作業系統自己判斷如何利用緩存。
如果需要更改系統的預設動作,可以設定/etc/sysctl.conf檔案。