free-簡單明瞭解釋清楚怎麼看內存使用

free命令能夠用來查看系統內存使用狀況。我通常習慣-m參數以MB的方式查看node

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

其餘參數緩存

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

解釋:spa

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

因此,能夠供程序使用的內存,應該看+buffers/cache(),而不是free。code

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

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

手動釋放緩存內存

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

下面來講說怎麼使用sysctl強制釋放緩存,和內存釋放相關的內核參數是vm.drop_caches,vm.drop_caches能夠設置爲0、一、二、3。it

說明class

   0 採起措施以前的默認值

   1 釋放pagecache

   2 釋放dentries 和 inodes

   3 釋放pagecache、dentries和inodes

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

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

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

 

參考:http://blogread.cn/it/article/7195?f=wb

相關文章
相關標籤/搜索