每天一個 Linux 命令:free 命令

free 命令可以顯示 Linux 系統中空閒的、已用的物理內存及 swap 內存,及被內核使用的 buffer。在 Linux 系統監控的工具中,free命令是最經常使用的命令之一。

1.命令格式:

free [參數]

2.命令功能:

free 命令顯示系統使用和空閒的內存情況,包括物理內存、交互區內存 (swap) 和內核緩衝區內存。共享內存將被忽略

3.命令參數:

-b 以 Byte 爲單位顯示內存使用情況。 

-k 以 KB 爲單位顯示內存使用情況。 

-m 以 MB 爲單位顯示內存使用情況。

-g  以 GB 爲單位顯示內存使用情況。 

-o 不顯示緩衝區調節列。 

-s<間隔秒數> 持續觀察內存使用狀況。 

-t 顯示內存總和列。 

-V 顯示版本信息。

4.使用實例:

實例 1:顯示內存使用情況

命令:

free

free -g

free -m

輸出:

[root@SF1150 service]# free

total    used    free   shared  buffers   cached

Mem:   32940112  30841684  2098428     0  4545340  11363424

-/+ buffers/cache:  14932920  18007192

Swap:   32764556  1944984  30819572

[root@SF1150 service]# free -g

total    used    free   shared  buffers   cached

Mem:      31     29     2     0     4     10

-/+ buffers/cache:     14     17

Swap:      31     1     29

[root@SF1150 service]# free -m

total    used    free   shared  buffers   cached

Mem:     32168   30119    2048     0    4438   11097

-/+ buffers/cache:   14583   17584

Swap:    31996    1899   30097

說明:

下面是對這些數值的解釋:

total: 總計物理內存的大小。

used: 已使用多大。

free: 可用有多少。

Shared: 多個進程共享的內存總額。

Buffers/cached: 磁盤緩存的大小。

第三行 (-/+ buffers/cached):

used: 已使用多大。

free: 可用有多少。

第四行是交換分區 SWAP 的,也就是我們通常所說的虛擬內存。

區別:第二行 (mem) 的 used/free 與第三行 (-/+ buffers/cache) used/free 的區別。這兩個的區別在於使用的角度來看,第一行是從 OS 的角度來看,因爲對於 OS,buffers/cached 都是屬於被使用,所以他的可用內存是 2098428KB, 已用內存是 30841684KB, 其中包括,內核(OS)使用 + Application(X, oracle,etc) 使用的 + buffers+cached.

第三行所指的是從應用程序角度來看,對於應用程序來說,buffers/cached 是等於可用的,因爲 buffer/cached 是爲了提高文件讀取的性能,當應用程序需在用到內存的時候,buffer/cached 會很快地被回收。

所以從應用程序的角度來說,可用內存 = 系統 free memory+buffers+cached。

如本機情況的可用內存爲:

18007156=2098428KB+4545340KB+11363424KB

接下來解釋什麼時候內存會被交換,以及按什麼方交換。

當可用內存少於額定值的時候,就會開會進行交換。如何看額定值:

命令:

cat /proc/meminfo

輸出:

[root@SF1150 service]# cat /proc/meminfo

MemTotal:   32940112 kB

MemFree:    2096700 kB

Buffers:    4545340 kB

Cached:    11364056 kB

SwapCached:  1896080 kB

Active:    22739776 kB

Inactive:   7427836 kB

HighTotal:      0 kB

HighFree:      0 kB

LowTotal:   32940112 kB

LowFree:    2096700 kB

SwapTotal:  32764556 kB

SwapFree:   30819572 kB

Dirty:       164 kB

Writeback:      0 kB

AnonPages:  14153592 kB

Mapped:     20748 kB

Slab:      590232 kB

PageTables:   34200 kB

NFS_Unstable:    0 kB

Bounce:       0 kB

CommitLimit: 49234612 kB

Committed_AS: 23247544 kB

VmallocTotal: 34359738367 kB

VmallocUsed:  278840 kB

VmallocChunk: 34359459371 kB

HugePages_Total:   0HugePages_Free:   0HugePages_Rsvd:   0Hugepagesize:   2048 kB

交換將通過三個途徑來減少系統中使用的物理頁面的個數:

  1. 減少緩衝與頁面 cache 的大小,

  2. 將系統 V 類型的內存頁面交換出去,

  3. 換出或者丟棄頁面。(Application 佔用的內存頁,也就是物理內存不足)。

事實上,少量地使用 swap 是不是影響到系統性能的。

那 buffers 和 cached 都是緩存,兩者有什麼區別呢?

爲了提高磁盤存取效率,Linux 做了一些精心的設計,除了對 dentry 進行緩存(用於 VFS, 加速文件路徑名到 inode 的轉換), 還採取了兩種主要 Cache 方式:Buffer Cache 和 Page Cache。前者針對磁盤塊的讀寫,後者針對文件 inode 的讀寫。這些 Cache 有效縮短了 I/O 系統調用(比如 read,write,getdents) 的時間。

磁盤的操作有邏輯級(文件系統)和物理級(磁盤塊),這兩種 Cache 就是分別緩存邏輯和物理級數據的。

Page cache 實際上是針對文件系統的,是文件的緩存,在文件層面上的數據會緩存到 page cache。文件的邏輯層需要映射到實際的物理磁盤,這種映射關係由文件系統來完成。當 page cache 的數據需要刷新時,page cache 中的數據交給 buffer cache,因爲 Buffer Cache 就是緩存磁盤塊的。但是這種處理在 2.6 版本的內核之後就變的很簡單了,沒有真正意義上的 cache 操作。

Buffer cache 是針對磁盤塊的緩存,也就是在沒有文件系統的情況下,直接對磁盤進行操作的數據會緩存到 buffer cache 中,例如,文件系統的元數據都會緩存到 buffer cache 中。

簡單說來,page cache 用來緩存文件數據,buffer cache 用來緩存磁盤數據。在有文件系統的情況下,對文件操作,那麼數據會緩存到 page cache,如果直接採用 dd 等工具對磁盤進行讀寫,那麼數據會緩存到 buffer cache。

所以我們看 linux, 只要不用 swap 的交換空間,就不用擔心自己的內存太少。如果常常 swap 用很多,可能你就要考慮加物理內存了。這也是 linux 看內存是否夠用的標準。

如果是應用服務器的話,一般只看第二行,+buffers/cache, 即對應用程序來說 free 的內存太少了,也是該考慮優化程序或加內存了。

實例 2:以總和的形式顯示內存的使用信息

命令:

 free -t

輸出:

[root@SF1150 service]# free -t 

total    used    free   shared  buffers   cached

Mem:   32940112  30845024  2095088     0  4545340  11364324

-/+ buffers/cache:  14935360  18004752Swap:   32764556  1944984  30819572Total:  65704668  32790008  32914660[root@SF1150 service]#

說明:

實例 3:週期性的查詢內存使用信息

命令:

free -s 10

輸出:

[root@SF1150 service]# free -s 10

total    used    free   shared  buffers   cached

Mem:   32940112  30844528  2095584     0  4545340  11364380

-/+ buffers/cache:  14934808  18005304Swap:   32764556  1944984  30819572

total    used    free   shared  buffers   cached

Mem:   32940112  30843932  2096180     0  4545340  11364388

-/+ buffers/cache:  14934204  18005908Swap:   32764556  1944984  30819572

說明:

每 10s 執行一次命令

轉自:www.cnblogs.com/peida/archive/2012/12/25/2831814.html

****推薦關注「算法愛好者」,修煉編程內功

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/Z0bBMHJzejevFskG8crB9w