linux free 解讀

free命令可以用來查看系統內存使用情況。我一般習慣-m參數以MB的方式查看

  1. [root@localhost ~]# free -m
  2. total used free shared buffers cached
  3. Mem: 1020288 947960 72328 312 82656 647740
  4. -/+ buffers/cache: 217564 802724
  5. Swap: 2097148 466656 1630492

其他參數

  • -b  以Byte爲單位顯示內存使用情況。 
  • -k  以KB爲單位顯示內存使用情況。 
  • -m  以MB爲單位顯示內存使用情況。
  • -g   以GB爲單位顯示內存使用情況。 
  • -o  不顯示緩衝區調節列。 
  • -s<間隔秒數>  持續觀察內存使用狀況。 
  • -t  顯示內存總和列。 
  • -V  顯示版本信息。

解釋:

  •    total:是總的物理內存
  •    used:使用中的內存
  •    free:完全空閒的內存
  •    shared:多個進程共享的內存 
  •    buffers:寫緩存,在寫入磁盤之前,先把數據緩存一段時間,可以釋放
  •    cache:讀緩存,讀取過的文件,會緩存一段時間。可以釋放
  •    -buffers/cache:應用程序實際使用中的內存大小,等於used-buffers-cached(Mem列的三個數)
  •    +buffers/cache:可供使用的內存總量,等於free+buffers+cached(Mem列的三個數)
  •    Swap:不解釋,都能看懂的

所以,可以供程序使用的內存,應該看+buffers/cache(),而不是free。

那明明已經開始使用 swap了,怎麼能說內存還充足呢?

照我的理解是,系統在分配內存的時候,如果發現內存不足,會釋放一批舊的cache,把空間騰出來給新申請的進程用, 有時候釋放不充分或者不及時,於是開始使用到swap了!

手動釋放緩存

使用sync命令可以把buffer強制寫入硬盤,有時候怕配置沒有生效,會使用它強制寫到硬盤。如果系統突然斷電,buffer的數據沒保存,是會丟失的!其實,大多數情況下,佔用內存的都是cache,而不是buffer!

下面來說說怎麼使用sysctl強制釋放緩存,和內存釋放相關的內核參數是vm.drop_caches,vm.drop_caches可以設置爲0、1、2、3。

說明

   0 採取措施之前的默認值

   1 釋放pagecache

   2 釋放dentries 和 inodes

   3 釋放pagecache、dentries和inodes

實際操作可以使用如下的sysctl,也可以使用echo 3 > /proc/sys/vm/drop_caches,效果一樣!

  1. [root@localhost ~]# sysctl vm.drop_caches=3
  2. vm.drop_caches = 3
  3. [root@localhost ~]# free -m
  4. total used free shared buffers cached
  5. Mem: 996 88 907 0 0 12
  6. -/+ buffers/cache: 75 920
  7. Swap: 2047 455 1592

不過這個還是會慢慢漲起來的!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章