1. 程式人生 > >free:一個在 Linux 中檢查內存使用情況的標準命令

free:一個在 Linux 中檢查內存使用情況的標準命令

合作夥伴 sre 最新 shm cached spa 交換 比較 廣泛

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

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

Linux 系統管理員面臨的一大挑戰是如何在沒有任何停機時間的情況下維護系統的良好運行。管理內存使用是 Linux 管理員又一個具有挑戰性的任務。free

是 Linux 中一個標準的並且被廣泛使用的命令,它被用來分析內存統計(空閑和已用)。今天,我們將要討論 free 命令以及它的一些有用選項。

推薦文章:

  • smem – Linux 下基於進程和用戶的內存占用報告
  • vmstat:一個標準的報告虛擬內存統計工具

Free 命令是什麽

free 命令能夠顯示系統中物理上的空閑free和已用used內存,還有交換swap內存,同時,也能顯示被內核使用的緩沖buffers和緩存caches。這些信息是通過解析文件 /proc/meminfo 而收集到的。

顯示系統內存

不帶任何選項運行 free 命令會顯示系統內存,包括空閑free、已用used、交換swap、緩沖buffers、緩存cached和交換swap的內存總數。


  1. # free
  2. total used free shared buffers cached
  3. Mem: 32869744 25434276 7435468 0 412032 23361716
  4. -/+ buffers/cache: 1660528 31209216
  5. Swap: 4095992 0 4095992

輸出有三行:

  • 第一行:表明全部內存、已用內存、空閑內存、共用內存(主要被 tmpfs(/proc/meminfo 中的Shmem 項)使用)、用於緩沖的內存以及緩存內容大小。
    • 全部:全部已安裝內存(/proc/meminfo 中的 MemTotal 項)
    • 已用:已用內存(全部計算 - 空閑+緩沖+緩存)
    • 空閑:未使用內存(/proc/meminfo
      中的 MemFree 項)
    • 共用:主要被 tmpfs 使用的內存(/proc/meminfo 中的 Shmem 項)
    • 緩沖:被內核緩沖使用的內存(/proc/meminfo 中的 Buffers 項)
    • 緩存:被頁面緩存和 slab 使用的內存(/proc/meminfo 中的 CachedSSReclaimable項)
  • 第二行:表明已用和空閑的緩沖/緩存
  • 第三行:表明總交換內存(/proc/meminfo 中的 SwapTotal 項)、空閑內存(/proc/meminfo 中的 SwapFree 項)和已用交換內存。

以 MB 為單位顯示系統內存

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


  1. # free -m
  2. total used free shared buffers cached
  3. Mem: 32099 24838 7261 0 402 22814
  4. -/+ buffers/cache: 1621 30477
  5. 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 為單位的輸出。


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

顯示全部內存行

默認情況下, free 命令的輸出只有三行(內存、緩沖/緩存以及交換)。為了統一以單獨一行顯示(全部(內存+交換)、已用(內存+(已用-緩沖/緩存)+交換)以及空閑(內存+(已用-緩沖/緩存)+交換),在 ‘free’ 命令後面加上 -t 選項。


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

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

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

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


  1. # free -s 2
  2. total used free shared buffers cached
  3. Mem: 32849392 25935844 6913548 188 182424 24632796
  4. -/+ buffers/cache: 1120624 31728768
  5. Swap: 20970492 0 20970492
  6. total used free shared buffers cached
  7. Mem: 32849392 25935288 6914104 188 182424 24632796
  8. -/+ buffers/cache: 1120068 31729324
  9. Swap: 20970492 0 20970492
  10. total used free shared buffers cached
  11. Mem: 32849392 25934968 6914424 188 182424 24632796
  12. -/+ buffers/cache: 1119748 31729644
  13. Swap: 20970492 0 20970492

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

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

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


  1. # free -s 2 -c 5
  2. total used free shared buffers cached
  3. Mem: 32849392 25931052 6918340 188 182424 24632796
  4. -/+ buffers/cache: 1115832 31733560
  5. Swap: 20970492 0 20970492
  6. total used free shared buffers cached
  7. Mem: 32849392 25931192 6918200 188 182424 24632796
  8. -/+ buffers/cache: 1115972 31733420
  9. Swap: 20970492 0 20970492
  10. total used free shared buffers cached
  11. Mem: 32849392 25931348 6918044 188 182424 24632796
  12. -/+ buffers/cache: 1116128 31733264
  13. Swap: 20970492 0 20970492
  14. total used free shared buffers cached
  15. Mem: 32849392 25931316 6918076 188 182424 24632796
  16. -/+ buffers/cache: 1116096 31733296
  17. Swap: 20970492 0 20970492
  18. total used free shared buffers cached
  19. Mem: 32849392 25931308 6918084 188 182424 24632796
  20. -/+ buffers/cache: 1116088 31733304
  21. Swap: 20970492 0 20970492

人類可讀格式

為了以人類可讀的格式輸出,在 free 命令的後面加上 -h 選項,和其他選項比如 -m-g 相比,這將會更人性化輸出(自動使用 GB 和 MB 單位)。


  1. # free -h
  2. total used free shared buff/cache available
  3. Mem: 2.0G 1.6G 138M 20M 188M 161M
  4. Swap: 2.0G 1.8G 249M

取消緩沖區和緩存內存輸出

默認情況下,緩沖/緩存內存是同時輸出的。為了取消緩沖和緩存內存的輸出,可以在 free 命令後面加上 -w選項。(該選項在版本 3.3.12 上可用)

註意比較上面有緩沖/緩存的輸出。


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

顯示最低和最高的內存統計

默認情況下, free 命令不會顯示最低和最高的內存統計。為了顯示最低和最高的內存統計,在 free 命令後面加上 -l 選項。


  1. # free -l
  2. total used free shared buffers cached
  3. Mem: 32849392 25931336 6918056 188 182424 24632808
  4. Low: 32849392 25931336 6918056
  5. High: 0 0 0
  6. -/+ buffers/cache: 1116104 31733288
  7. Swap: 20970492 0 20970492

閱讀關於 free 命令的更過信息

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


  1. # free --help
  2. or
  3. # man free

原文發布時間為:2017-03-17

本文來自雲棲社區合作夥伴“Linux中國”

原文鏈接

free:一個在 Linux 中檢查內存使用情況的標準命令