free命令可以用來查看系統內存使用情況。我一般習慣-m參數以MB的方式查看
[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 顯示版本信息。
解釋:
- 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,效果一樣!
[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
不過這個還是會慢慢漲起來的!