天天看點

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

我們都知道, it 基礎設施方面的大多數伺服器(包括世界頂級的超級計算機)都運作在 linux 平台上,因為和其他作業系統相比, linux 更加靈活。有的作業系統對于一些微乎其微的改動和更新檔更新都需要重新開機,但是 linux 不需要,隻有對于一些關鍵更新檔的更新, linux 才會需要重新開機。

linux 系統管理者面臨的一大挑戰是如何在沒有任何停機時間的情況下維護系統的良好運作。管理記憶體使用是 linux 管理者又一個具有挑戰性的任務。<code>free</code> 是 linux 中一個标準的并且被廣泛使用的指令,它被用來分析記憶體統計(空閑和已用)。今天,我們将要讨論 <code>free</code> 指令以及它的一些有用選項。

推薦文章:

<a href="https://linux.cn/article-7681-1.html">smem – linux 下基于程序和使用者的記憶體占用報告</a>

<a href="https://linux.cn/article-8157-1.html">vmstat:一個标準的報告虛拟記憶體統計工具</a>

<a target="_blank"></a>

free 指令能夠顯示系統中實體上的空閑free和已用used記憶體,還有交換swap記憶體,同時,也能顯示被核心使用的緩沖buffers和緩存caches。這些資訊是通過解析檔案 <code>/proc/meminfo</code> 而收集到的。

不帶任何選項運作 <code>free</code> 指令會顯示系統記憶體,包括空閑free、已用used、交換swap、緩沖buffers、緩存cached和交換swap的記憶體總數。

<code># free</code>

<code>total used free shared buffers cached</code>

<code>mem: 32869744 25434276 7435468 0 412032 23361716</code>

<code>-/+ buffers/cache: 1660528 31209216</code>

<code>swap: 4095992 0 4095992</code>

輸出有三行:

第一行:表明全部記憶體、已用記憶體、空閑記憶體、共用記憶體(主要被 tmpfs(<code>/proc/meminfo</code> 中的<code>shmem</code> 項)使用)、用于緩沖的記憶體以及緩存内容大小。

全部:全部已安裝記憶體(<code>/proc/meminfo</code> 中的 <code>memtotal</code> 項)

已用:已用記憶體(全部計算 - 空閑+緩沖+緩存)

空閑:未使用記憶體(<code>/proc/meminfo</code> 中的 <code>memfree</code> 項)

共用:主要被 tmpfs 使用的記憶體(<code>/proc/meminfo</code> 中的 <code>shmem</code> 項)

緩沖:被核心緩沖使用的記憶體(<code>/proc/meminfo</code> 中的 <code>buffers</code> 項)

緩存:被頁面緩存和 slab 使用的記憶體(<code>/proc/meminfo</code> 中的 <code>cached</code> 和 <code>ssreclaimable</code>項)

第二行:表明已用和空閑的緩沖/緩存

第三行:表明總交換記憶體(<code>/proc/meminfo</code> 中的 <code>swaptotal</code> 項)、空閑記憶體(<code>/proc/meminfo</code> 中的 <code>swapfree</code> 項)和已用交換記憶體。

預設情況下, <code>free</code> 指令以 <code>kb - kilobytes</code> 為機關輸出系統記憶體,這對于絕大多數管理者來說會有一點迷糊(當系統記憶體很大的時候,我們中的許多人需要把輸出轉化為以 mb 為機關,進而才能夠了解記憶體大小)。為了避免這個迷惑,我們在 <code>free</code> 指令後面加上 <code>-m</code> 選項,就可以立即得到以 <code>mb - megabytes</code>為機關的輸出。

<code># free -m</code>

<code>mem: 32099 24838 7261 0 402 22814</code>

<code>-/+ buffers/cache: 1621 30477</code>

<code>swap: 3999 0 3999</code>

如何從上面的輸出中檢查剩餘多少空閑記憶體?主要基于已用used和空閑free兩列。你可能在想,你隻有很低的空閑記憶體,因為它隻有 <code>10%</code>, 為什麼?

全部實際可用記憶體 = (全部記憶體 - 第 2 行的已用記憶體)

全部記憶體 = 32099

實際已用記憶體 = 1621 ( = 全部記憶體 - 緩沖 - 緩存)

全部實際可用記憶體 = 30477

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

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

全部實際已用記憶體 = 第一列已用 - (第一列緩沖 + 第一列緩存)

已用記憶體 = 24838

已用緩沖 = 402

已用緩存 = 22814

全部實際已用記憶體 = 1621

預設情況下, <code>free</code> 指令會以 <code>kb - kilobytes</code> 為機關顯示輸出,這對于大多數管理者來說會有一些迷惑,是以我們使用上面的選項來獲得以 <code>mb - megabytes</code> 為機關的輸出。但是,當伺服器的記憶體很大(超過 100 gb 或 200 gb)時,上面的選項也會讓人很迷惑。是以,在這個時候,我們可以在 <code>free</code> 指令後面加上 <code>-g</code> 選項,進而立即得到以 <code>gb - gigabytes</code> 為機關的輸出。

<code># free -g</code>

<code>mem: 31 24 7 0 0 22</code>

<code>-/+ buffers/cache: 1 29</code>

<code>swap: 3 0 3</code>

預設情況下, <code>free</code> 指令的輸出隻有三行(記憶體、緩沖/緩存以及交換)。為了統一以單獨一行顯示(全部(記憶體+交換)、已用(記憶體+(已用-緩沖/緩存)+交換)以及空閑(記憶體+(已用-緩沖/緩存)+交換),在 ‘free’ 指令後面加上 <code>-t</code> 選項。

<code># free -t</code>

<code>total: 36965736 27094804 42740676</code>

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

下面的指令将會每 2 秒運作一次直到你退出:

<code># free -s 2</code>

<code>mem: 32849392 25935844 6913548 188 182424 24632796</code>

<code>-/+ buffers/cache: 1120624 31728768</code>

<code>swap: 20970492 0 20970492</code>

<code></code>

<code>mem: 32849392 25935288 6914104 188 182424 24632796</code>

<code>-/+ buffers/cache: 1120068 31729324</code>

<code>mem: 32849392 25934968 6914424 188 182424 24632796</code>

<code>-/+ buffers/cache: 1119748 31729644</code>

另外,你可以按延遲和具體次數運作 <code>free</code> 指令,一旦達到某個次數,便自動退出。

下面的指令将會每 2 秒運作一次 free 指令,計數 5 次以後自動退出。

<code># free -s 2 -c 5</code>

<code>mem: 32849392 25931052 6918340 188 182424 24632796</code>

<code>-/+ buffers/cache: 1115832 31733560</code>

<code>mem: 32849392 25931192 6918200 188 182424 24632796</code>

<code>-/+ buffers/cache: 1115972 31733420</code>

<code>mem: 32849392 25931348 6918044 188 182424 24632796</code>

<code>-/+ buffers/cache: 1116128 31733264</code>

<code>mem: 32849392 25931316 6918076 188 182424 24632796</code>

<code>-/+ buffers/cache: 1116096 31733296</code>

<code>mem: 32849392 25931308 6918084 188 182424 24632796</code>

<code>-/+ buffers/cache: 1116088 31733304</code>

為了以人類可讀的格式輸出,在 <code>free</code> 指令的後面加上 <code>-h</code> 選項,和其他選項比如 <code>-m</code> 和 <code>-g</code> 相比,這将會更人性化輸出(自動使用 gb 和 mb 機關)。

<code># free -h</code>

<code>total used free shared buff/cache available</code>

<code>mem: 2.0g 1.6g 138m 20m 188m 161m</code>

<code>swap: 2.0g 1.8g 249m</code>

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

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

<code># free -wh</code>

<code>total used free shared buffers cache available</code>

<code>mem: 2.0g 1.6g 137m 20m 8.1m 183m 163m</code>

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

<code># free -l</code>

<code>mem: 32849392 25931336 6918056 188 182424 24632808</code>

<code>low: 32849392 25931336 6918056</code>

<code>high: 0 0 0</code>

<code>-/+ buffers/cache: 1116104 31733288</code>

<code># free --help</code>

<code>or</code>

<code># man free</code>

原文釋出時間為:2017-03-17

本文來自雲栖社群合作夥伴“linux中國”

繼續閱讀