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
其餘參數緩存
解釋:spa
因此,能夠供程序使用的內存,應該看+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
不過這個仍是會慢慢漲起來的!