1. 程式人生 > >Linux 中free命令檢查記憶體使用情況

Linux 中free命令檢查記憶體使用情況

我們都知道, IT 基礎設施方面的大多數伺服器(包括世界頂級的超級計算機)都執行在 Linux 平臺上,因為和其他作業系統相比, Linux 更加靈活。有的作業系統對於一些微乎其微的改動和補丁更新都需要重啟,但是 Linux 不需要,只有對於一些關鍵補丁的更新, Linux 才會需要重啟。

free:一個在 Linux 中檢查記憶體使用情況的標準命令

Linux 系統管理員面臨的一大挑戰是如何在沒有任何停機時間的情況下維護系統的良好執行。管理記憶體使用是 Linux 管理員又一個具有挑戰性的任務。free是 Linux 中一個標準的並且被廣泛使用的命令,它被用來分析記憶體統計(空閒和已用)。今天,我們將要討論 free 命令以及它的一些有用選項。

Free 命令是什麼

free 命令能夠顯示系統中物理上的空閒(free)和已用(used)記憶體,還有交換(swap)記憶體,同時,也能顯示被核心使用的緩衝(buffers)和快取(caches)。這些資訊是通過解析檔案 /proc/meninfo 而收集到的。

顯示系統記憶體

不帶任何選項執行 free 命令會顯示系統記憶體,包括空閒(free)、已用(used)、交換(swap)、緩衝(buffers)、快取(cached)和交換(swap)的記憶體總數。

# free
             total       used       free     shared    buffers     cached
Mem:      32869744   25434276    7435468          0     412032   23361716
-/+ buffers/cache:    1660528   31209216
Swap:      4095992          0    4095992

輸出有三行:

  • 第一行:表明全部記憶體、已用記憶體、空閒記憶體、共用記憶體(主要被 tmpfs(/proc/meninfo 中的 Shmem 項)使用)、用於緩衝的記憶體以及快取內容大小。
    • 全部:全部已安裝記憶體(/proc/meminfo 中的 MemTotal 項)
    • 已用:已用記憶體(全部計算 - 空間+緩衝+快取)
    • 空閒:未使用記憶體(/proc/meminfo 中的 MemFree 項)
    • 共用:主要被 tmpfs 使用的記憶體(/proc/meminfo 中的 Shmem 項)
    • 緩衝:被核心緩衝使用的記憶體(/proc/meminfo 中的 Buffers 項)
    • 快取:被頁面快取和 slab 使用的記憶體(/proc/meminfo 中的 Cached 和 SSReclaimable 項)
  • 第二行:表明已用和空閒的緩衝/快取
  • 第三行:表明總交換記憶體(/proc/meminfo 中的 SwapTotal 項)、空閒記憶體(/proc/meminfo 中的 SwapFree 項)和已用交換記憶體。

以 MB 為單位顯示系統記憶體

預設情況下, free 命令以 KB - Kilobytes 為單位輸出系統記憶體,這對於絕大多數管理員來說會有一點迷糊(當系統記憶體很大的時候,我們中的許多人需要把輸出轉化為以 MB 為單位,從而才能夠理解記憶體大小)。為了避免這個迷惑,我們在 free 命令後面加上 -m 選項,就可以立即得到以 MB - Megabytes為單位的輸出。

# free -m
             total       used       free     shared    buffers     cached
Mem:         32099      24838       7261          0        402      22814
-/+ buffers/cache:       1621      30477
Swap:         3999          0       3999

如何從上面的輸出中檢查剩餘多少空閒記憶體?主要基於已用(used)和空閒(free)兩列。你可能在想,你只有很低的空閒記憶體,因為它只有 10%, 為什麼?

  • 全部實際可用記憶體 = (全部記憶體 - 第 2 行的已用記憶體)
    • 全部記憶體 = 32099
    • 實際已用記憶體 = 1621 ( = 全部記憶體 - 緩衝 - 快取)
  • 全部實際可用記憶體 = 30477

如果你的 Linux 版本是最新的,那麼有一個檢視實際空閒記憶體的選項,叫做可用(available) ,對於舊的版本,請看顯示 -/+ buffers/cache 那一行對應的空閒(free)一列。

如何從上面的輸出中檢查有多少實際已用記憶體?基於已用(used)和空閒(free)一列。你可能想,你已經使用了超過 95% 的記憶體。

  • 全部實際已用記憶體 = 第一列已用 - (第一列緩衝 + 第一列快取)
    • 已用記憶體 = 24838
    • 已用緩衝 = 402
    • 已用快取 = 22814
  • 全部實際已用記憶體 = 1621

以 GB 為單位顯示記憶體

預設情況下, free 命令會以 KB - kilobytes 為單位顯示輸出,這對於大多數管理員來說會有一些迷惑,所以我們使用上面的選項來獲得以 MB - Megabytes 為單位的輸出。但是,當伺服器的記憶體很大(超過 100 GB 或 200 GB)時,上面的選項也會讓人很迷惑。所以,在這個時候,我們可以在 free 命令後面加上 -g 選項,從而立即得到以 GB - Gigabytes 為單位的輸出。

# free -g
             total       used       free     shared    buffers     cached
Mem:            31         24          7          0          0         22
-/+ buffers/cache:          1         29
Swap:            3          0          3

顯示全部記憶體行

預設情況下, free 命令的輸出只有三行(記憶體、緩衝/快取以及交換)。為了統一以單獨一行顯示(全部(記憶體+交換)、已用(記憶體+(已用-緩衝/快取)+交換)以及空閒(記憶體+(已用-緩衝/快取)+交換),在 ‘free’ 命令後面加上 -t 選項。

# free -t
             total       used       free     shared    buffers     cached
Mem:      32869744   25434276    7435468          0     412032   23361716
-/+ buffers/cache:    1660528   31209216
Swap:      4095992          0    4095992
Total:    36965736   27094804   42740676

按延遲執行 free 命令以便更好的統計

預設情況下, free 命令只會顯示一次統計輸出,這是不足夠進一步排除故障的,所以,可以通過新增延遲(延遲是指在幾秒後再次更新)來定期統計記憶體活動。如果你想以兩秒的延遲執行 free 命令,可以使用下面的命令(如果你想要更多的延遲,你可以按照你的意願更改數值)。

下面的命令將會每 2 秒執行一次直到你退出:

# free -s 2
             total       used       free     shared    buffers     cached
Mem:      32849392   25935844    6913548        188     182424   24632796
-/+ buffers/cache:    1120624   31728768
Swap:     20970492          0   20970492

             total       used       free     shared    buffers     cached
Mem:      32849392   25935288    6914104        188     182424   24632796
-/+ buffers/cache:    1120068   31729324
Swap:     20970492          0   20970492

             total       used       free     shared    buffers     cached
Mem:      32849392   25934968    6914424        188     182424   24632796
-/+ buffers/cache:    1119748   31729644
Swap:     20970492          0   20970492

按延遲和具體次數執行 free 命令

另外,你可以按延遲和具體次數執行 free 命令,一旦達到某個次數,便自動退出。

下面的命令將會每 2 秒執行一次 free 命令,計數 5 次以後自動退出。

# free -s 2 -c 5
             total       used       free     shared    buffers     cached
Mem:      32849392   25931052    6918340        188     182424   24632796
-/+ buffers/cache:    1115832   31733560
Swap:     20970492          0   20970492

             total       used       free     shared    buffers     cached
Mem:      32849392   25931192    6918200        188     182424   24632796
-/+ buffers/cache:    1115972   31733420
Swap:     20970492          0   20970492

             total       used       free     shared    buffers     cached
Mem:      32849392   25931348    6918044        188     182424   24632796
-/+ buffers/cache:    1116128   31733264
Swap:     20970492          0   20970492

             total       used       free     shared    buffers     cached
Mem:      32849392   25931316    6918076        188     182424   24632796
-/+ buffers/cache:    1116096   31733296
Swap:     20970492          0   20970492

             total       used       free     shared    buffers     cached
Mem:      32849392   25931308    6918084        188     182424   24632796
-/+ buffers/cache:    1116088   31733304
Swap:     20970492          0   20970492

取消緩衝區和快取記憶體輸出

預設情況下,緩衝/快取記憶體是同時輸出的。為了取消緩衝和快取記憶體的輸出,可以在 free 命令後面加上 -w 選項。(該選項在版本 3.3.12 上可用)

注意比較上面有緩衝/快取的輸出。

# free -wh
              total        used        free      shared     buffers       cache   available
Mem:           2.0G        1.6G        137M         20M        8.1M        183M        163M
Swap:          2.0G        1.8G        249M

顯示最低和最高的記憶體統計

預設情況下, free 命令不會顯示最低和最高的記憶體統計。為了顯示最低和最高的記憶體統計,在 free 命令後面加上 -l 選項。

# free -l
             total       used       free     shared    buffers     cached
Mem:      32849392   25931336    6918056        188     182424   24632808
Low:      32849392   25931336    6918056
High:            0          0          0
-/+ buffers/cache:    1116104   31733288
Swap:     20970492          0   20970492

閱讀關於 free 命令的更過資訊

如果你想了解 free 命令的更多可用選項,只需檢視其 man 手冊

# free --help
or
# man free

本文由 LCTT 原創編譯,Linux中國 榮譽推出