每天一個 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
交換將通過三個途徑來減少系統中使用的物理頁面的個數:
-
減少緩衝與頁面 cache 的大小,
-
將系統 V 類型的內存頁面交換出去,
-
換出或者丟棄頁面。(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