Linux常用命令:free(2018.07.29 更新)

常用

free 命令是 Linux 上很簡(jiǎn)單、很常用的一個(gè)命令。
free 命令的輸出會(huì)有 Swap 相關(guān)的內(nèi)容,本文忽略 Swap。

free
free -k    # 以KB為單位
free -m    # 以MB為單位   
free -g    # 以GB為單位
free -h    # 人類(lèi)可讀

輸出(舊版)

使用 free 命令的時(shí)候,我們一般最關(guān)心的就是:現(xiàn)在還有多少內(nèi)存可以讓?xiě)?yīng)用程序使用?
但是,舊版的 free 命令并不能直觀地展示這一點(diǎn)。

total used free shared buffers cached
Mem 3856200 3321044 535156 251096 232084 1406376
-/+ buffers/cache 1682584 2173616
Swap 3999740 482480 3517260
  • Mem 這一行是從 Linux 內(nèi)核的角度看物理內(nèi)存的使用量。
    • total - 計(jì)算機(jī)的物理內(nèi)存總量。
    • used - 從 Linux 內(nèi)核的角度,已使用的內(nèi)存 = 應(yīng)用程序使用的內(nèi)存 + 內(nèi)核使用的內(nèi)存(可回收+不可回收)。
    • free - 完全沒(méi)有使用到的內(nèi)存。
    • shared - 共享內(nèi)存。
    • buffers - 內(nèi)核的 buffers cache 系統(tǒng)占用。
    • cached - 內(nèi)核的 page cache 系統(tǒng)占用。
  • -/+buffer/cache 這一行是從應(yīng)用程序的角度看物理內(nèi)存的使用量。
    • used - 應(yīng)用程序?qū)嶋H使用的內(nèi)存。其值為 Mem 一行中的 used - buffers - cached == total - free - buffer - cached。
    • free - 從應(yīng)用程序的角度看還可以使用的內(nèi)存(不是非常準(zhǔn)確)。其值為 Mem 一行中的 free + buffers + cached。但是 buffers/cached 是包含了 shared 的,shared 不能被隨時(shí)回收。
  • 粗略地看,應(yīng)用程序還可以繼續(xù)使用的內(nèi)存大小為:-/+buffer/cache 一行中的 free 減去 Mem 一行中的 shared。在這個(gè)例子中,為 2173616 - 251096 = 1922520。

輸出(新版)

最近把個(gè)人的 Linux 機(jī)器的系統(tǒng)給升級(jí)了,不知道具體從哪個(gè)版本開(kāi)始,free 命令的輸出做了改進(jìn)。刪除了 -/+ buffer/cache 一行,加了一列 available,同時(shí)修改了一些列的意義。相對(duì)上面舊版的輸出來(lái)說(shuō),直觀性好了不少。大部分情況下,只需要看 available 一列就可以了。(當(dāng)然,具體情況還是得具體分析…)

total used free shared buff/cache available
Mem 9.6G 1.1G 6.0G 160M 2.5G 8.0G
Swap 3.8G 0B 3.8G

現(xiàn)在只有 Mem 一行數(shù)據(jù)來(lái)描述內(nèi)存的使用情況(Swap 一行暫時(shí)忽略),第一感覺(jué)就比舊版的輸出好看很多。

  • total - /proc/meminfo 中的 MemTotal,表示計(jì)算機(jī)的內(nèi)存總量。
  • used - 被占用的內(nèi)存,不能隨時(shí)回收,其值為 total - free - buff/cache
  • free - 完全沒(méi)有被使用到的內(nèi)存,/proc/meminfo 中的 Memfree。
  • shared - /proc/meminfo 中的 Shmem,共享內(nèi)存,一般是被 tmpfs 占用。
  • buff/cache:buffer + cache
    • buffer:/proc/meminfo 中的 Buffers。
    • cache:/proc/meminfo 中的 Cached。
  • available - 應(yīng)用程序真正可用的內(nèi)存(比較準(zhǔn)確的評(píng)估值),其值為 /proc/meminfo 中的 MemAvailable。從這個(gè)例子中,可以看出 (free + buff/cache - shared = 6.0G + 2.5G - 160M) > (available = 8.0G),所以 buff/cache 對(duì)應(yīng)的統(tǒng)計(jì)數(shù)據(jù)里面除了 shared 之外,還有一些其他不能被隨時(shí)回收的內(nèi)存,這部分被 Linux 內(nèi)核內(nèi)部占用。

小結(jié)

free 命令輸出的數(shù)據(jù)本質(zhì)上是由 /proc/meminfo 下的統(tǒng)計(jì)數(shù)據(jù)。新版的內(nèi)核優(yōu)化了 /proc/meminfo 下的一些統(tǒng)計(jì)數(shù)據(jù),使得 free 命令的輸出更加準(zhǔn)確、清晰。
這里要明確一點(diǎn),大部分情況下,大部分 buffer/cache 占用的內(nèi)存在需要時(shí)可以被回收并重新分配。但是要注意下面幾點(diǎn):

  1. shared 屬于 page cache,所以 cache 的統(tǒng)計(jì)里包括 shared,但是 shared 不能被內(nèi)核隨時(shí)回收。
  2. 除了 shared 以外,buffer 或 cache 對(duì)應(yīng)的統(tǒng)計(jì)信息里,還有一部分被內(nèi)核“真正”占用,這部分也不能被隨時(shí)回收。
  3. 大部分內(nèi)核的 free 命令還是輸出舊的格式,此時(shí)我們只能根據(jù)輸出簡(jiǎn)單估算出 available 的內(nèi)存大?。ㄒ?jiàn)舊版輸出的說(shuō)明,實(shí)際 available 的內(nèi)存應(yīng)該比這里估算的值?。?。

(2018.07.29 更新,新版 free 命令的輸出說(shuō)明。)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容