centos6 free 和 centos 7的free 的差異與對比



  在實際的工作中,我們經常會用到free這個命令,但是我們對這個命令的實際含義又知道多少,它在centos6 和centos 7 的顯示又有什么差異?讓我們一起瞧一瞧,看一看。

一 centos6 free

  free 命令默認是使用 kb 作為單位的,free -m 則是以Mb作為單位的,free -g 是以gb作為單位的,gb-->mb-->kb 采用的是1024度量單位(而非1000)

常用參數和含義

-b  指定單位為bytes
-m  指定單位為mb
-k  指定單位為kb
-g  指定單位為gb
-o  顯示老版本的輸出格式也就是不顯示-/+ buffers/cache 這行
-t  顯示物理內存和虛擬內存的總和
-s  n 每隔n秒顯示一次
-c  顯示多少次
-V  顯示free的版本信息並退出
-l  顯示最低和最高的內存數據統計

centos6 free 命令示例

[djx@xiaoxiao ~]$ cat /etc/redhat-release
CentOS release 6.5 (Final)
[djx@xiaoxiao ~]$ free 
             total       used       free     shared    buffers     cached
Mem:       8061376    7730380     330996          0     178608    4884772
-/+ buffers/cache:    2667000    5394376
Swap:            0          0          0

[djx@xiaoxiao ~]$ free -m
             total       used       free     shared    buffers     cached
Mem:          7872       7519        352          0        174       4737
-/+ buffers/cache:       2607       5264
Swap:            0          0          0

[djx@xiaoxiao ~]$ free -g
             total       used       free     shared    buffers     cached
Mem:             7          7          0          0          0          4
-/+ buffers/cache:          2          5
Swap:            0          0          0

free 值講解

  我們這里以free 的值來進行講解(顯得精確些)

[djx@xiaoxiao ~]$ free 
             total                used           free               shared    buffers            cached
Mem:       8061376(total)    7730380(used1)     330996(free1)          0     178608(buffers1)    4884772(cached1)
-/+ buffers/cache:           2667000(used2)     5394376(free2)
Swap:            0          0          0

Mem
  total代表總的內存大小, used 代表程序已經使用的內存大小,free代表的是空閑的內存大小, shared 代表的是共享內存,buffers 代表的是 buffers cache, cached 代表的是 Page cache.

-/+ buffers/cache

  used 代表的除去buffers和cached實際程序占用的內存, free代表的是 total - 第二行used, 也就是 第一行free + 第一行buffers + 第一行cached

Swap

  這行代表的是交換分區(虛擬內存)。

計算公式

total=used1 + free1 ,總的內存大小= 使用的(used1)+ 空閑的(free1)
used1 = used2(第二行的2667000) + buffers1(178608)  + cached1(4884772)
used2 = total - free2
free2 = free1 + buffers1(178608)  + cached1(4884772)

二 centos7 free

  centos7 的free 命令多了一個 -h 參數,它會自動根據內存的大小,自動轉換成合適的單位,默認的計算倍數是 1024 。free 的顯示信息來自於/proc/meminfo

常用的參數

-h   以人性化顯示
--si 指定計算倍數為1000.
-b  指定單位為bytes
-m  指定單位為mb
-k  指定單位為kb
-g  指定單位為gb
-t  顯示物理內存和虛擬內存的總和
-s  n 每隔n秒顯示一次
-c  顯示多少次
-V  顯示free的版本信息並退出
-l  顯示最低和最高的內存數據統計
-w  將buff和cacher 分開顯示,默認是在一起顯示的。

centos7 free 命令示例

[root@localhost ~]# cat  /etc/redhat-release 
CentOS Linux release 7.5.1804 (Core) 
[root@localhost ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           1.8G        197M        1.3G        9.4M        272M        1.4G
Swap:          2.0G          0B        2.0G

[root@localhost ~]# free -wh
              total        used        free      shared     buffers       cache   available
Mem:           1.8G        197M        1.3G        9.4M        2.1M        270M        1.4G
Swap:          2.0G          0B        2.0G

以 free -h 的值為例,

Mem :

total 代表的總的內存 (對應/proc/meminfo 里的MemTotal)
used 代表的是 已經使用的內存
free 是代表空閑的內存(對應/proc/meminfo 里的MemFree) 
shared 代表的是共享的內存(對應/proc/meminfo 里的Shmem)
buff/cache 代表的是 buff(對應/proc/meminfo里的Buffers)和cache的內存(對應/proc/meminfo 里的Cached and Slab), 
available 代表的是 活躍的內存
(官方文檔對於available這樣寫到:Estimation of how much memory is available for starting new applications, without swapping. Unlike the data provided by the cache or free fields,  this  field
              takes  into  account  page  cache  and  also that not all reclaimable memory slabs will be reclaimed due to items being in use (MemAvailable in /proc/meminfo,
              available on kernels 3.14, emulated on kernels 2.6.27+, otherwise the same as free)
) available 代表的是一個新的應用程序可以使用內存的估計值,它不等於 free +  buff/cache ,,因為在centos 7.2與Ubuntu 16.04以上(包含)的系統使用了新的Linux內核,所以並不是所有的buffer/cache空間都可以被回收。
內核commit鏈接 :https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?spm=a2c4g.11186623.2.9.5e3113ceBi7J5X&id=34e431b0ae398fc54ea69ff85ec700722c9da773

計算公式

used  =  total - free - buffers - cache
buff/cache = buffers + cache

三 buffers 和cache 的 介紹

buffers

  buffers 指的是 Memory used by kernel buffers(磁盤等塊設備的緩沖) ,buffers 的字面意思就是緩沖,緩沖存在的目的是為了解決從速度快的地方往速度慢的地方輸出東西,緩沖經常用於像 內存寫入數據到磁盤,寄存器數據寫到內存等等。位於內存buffer中的數據不是即時寫入磁盤,而是系統空閑或者buffer達到一定大小統一寫到磁盤中,所以斷電易失,為了防止數據丟失所以我們最好正常關機或者多執行幾次sync命令,讓位於buffer上的數據立刻寫到磁盤里。

cached

  cached 指的是 Memory used by the page cache and slabs(文件系統層級的緩存),cache 的字面意思是緩存,緩存存在的目的是為了解決從速度慢的地方獲取數據,比如我們讀取硬盤里面的文件,硬盤的傳輸速度是比內存慢很多的,當我們讀取完一個文件后,然后重新打開這個文件,如果有緩存,也就是將上次讀取文件后將文件緩存在內存里面,我們會發現,我們打開文件會比第一次打開快很多。

針對於兩者直接的關系,我在網上看到一張圖,可以很清晰的說明
image

為什么要清除 buffers 和caches

  因為caches是緩存的一些數據,當我們實際的數據內容已經更新了的話,那么當我們需要獲取最新的數據時候,我們就需要清除caches里面的內容。
或者當我們的內存的不足(將被耗盡)時,那么系統會自動清除buffers 和caches ,以滿足程序對內存的需求。

如何清除 buffers 和caches

下圖來自網絡
image
注意

在清除buffers 前,為了防止數據丟失所以我們最好正常關機或者多執行幾次sync命令,讓位於buffer上的數據立刻寫到磁盤里。
方式一 :
表示清除 pagecache 。

echo 1 > /proc/sys/vm/drop_caches

表示清除回收 slab
分配器中的對象(包括目錄項緩存和 inode 緩存)。 slab 分配器是內核中管理內存的一種機制,其中很多緩存數據實現都是用的 pagecache 。

echo 2 > /proc/sys/vm/drop_caches

表示清除 pagecache 和 slab 分配器中的緩存對象。

echo 3 > /proc/sys/vm/drop_caches

重啟后會失效

方式二: sysctl 命令更改

sysctl  -w   vm.drop_caches=1

重啟后會失效

方式三:
編輯配置文件 sysctl.conf

echo "vm.drop_caches = 1" >>  /etc/sysctl.conf
sysctl -p  /etc/sysctl.conf

重啟后不失效。


免責聲明!

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



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