free-簡單明了解釋清楚怎么看內存使用


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

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

 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM