天天看點

Linux檢視記憶體指令free1 free的輸出解釋2 手動釋放buffers和cached記憶體

[[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檔案。