英文原文: https://www.linuxatemyram.com/ 作者: "Vidar Holen" 譯者: "thinkam" 發生了什麼? Linux正借用你未使用的記憶體來做磁碟緩存。這使你的電腦看起來可用記憶體很少,但事實不是這樣!一切都很正常! 為什麼這麼做? 磁碟緩存使你的系統運行 ...
英文原文: https://www.linuxatemyram.com/
作者: Vidar Holen
譯者: thinkam
發生了什麼?
Linux正借用你未使用的記憶體來做磁碟緩存。這使你的電腦看起來可用記憶體很少,但事實不是這樣!一切都很正常!
為什麼這麼做?
磁碟緩存使你的系統運行更快更流暢!除了使新手感到困惑,這沒什麼缺點。它從來沒有以任何方式從你的應用拿走記憶體。
如果我想運行更多的應用該怎麼辦?
如果你的應用想要獲取更多的記憶體,系統會從磁碟緩存中拿走一塊被借用的記憶體。磁碟緩存會立即還給應用!你的電腦可用記憶體的並不少!
我需要更多的交換分區(swap)嗎?
不需要,磁碟緩存僅會借用應用目前不需要的記憶體。它不會使用交換分區。如果應用需要更多的記憶體,系統會從磁碟緩存中拿回來。系統不會使用交換分區。
我如何讓Linux停止這樣做?
你不能禁用磁碟緩存。任何人想要禁用磁碟緩存的唯一理由是他認為這從他的應用中拿走了記憶體,但事實不是這樣!磁碟緩存可以讓應用載入更快並且運行更加流暢,但它卻從來沒有拿走記憶體!因此,沒有任何理由去禁用它!
如果不是這樣,為什麼top
和free
命令說我所有的記憶體已被使用?
這僅僅是用辭的差異。你和Linux系統一致認為被應用占用的記憶體稱為used
,而沒有被任何程式使用的部分稱為free
。
但是,你認為目前被占用但仍然可以被應用使用的記憶體稱作什麼呢?
你可能認為這部分記憶體是free
或available
。而Linux系統稱它used
或available
:
記憶體 | 你稱它 | Linux稱它 |
---|---|---|
被應用使用 | used |
used |
被占用,但可以使用 | free (或available ) |
used (或available ) |
沒有用來做任何事 | free |
free |
譯註:老版
free
命令中被占用但可以使用的記憶體稱為used
(used
中的一部分,即buffers
+cached
), 而新版的free
命令中稱之為available
。
不嚴格來講,top
和free
命令稱這部分記憶體為buffers
和cached
。因為你和Linux用辭的差異,你可能認為你的電腦可用記憶體很少,不過事實並非如此。
譯註:這部分記憶體準確來說是新版本
free
命令中的available
或者是新版本top
命令中的avail Mem
。
我怎麼看我真正還有多少可用記憶體?
為了弄明白除了交換分區外你的應用可以使用多少記憶體,執行free -m
命令,然後查看available
那一列:
$ free -m
total used free shared buff/cache available
Mem: 1504 1491 13 0 855 792
Swap: 2047 6 2041
(2016年之前的Linux安裝版本,在-/+ buffers/cache
那排查看free
列)
這是你以MB
為單位的答案。如果你天真地查看used
和free
,你會認為你的記憶體幾乎快占滿達到99%,然而實際僅僅只有47%!
如果想查看更詳細、更專業的關於Linux統計available
記憶體大小的描述,請看the commit that added the field.
什麼時候我該開始擔心?
一個擁有足夠記憶體的、運行良好的Linux系統在運行一段時間後會表現出以下預期的無害特征:
free
記憶體接近於0used
記憶體接近總共記憶體available
記憶體(或者是free + buffers/cache
)有足夠空間(比如說:總記憶體的20%以上)swap used
沒有發生變化
真正的記憶體不夠、你也許想調查原因的情形,警告標誌如下:
available
記憶體(或者是free + buffers/cache
)接近於0swap used
在增加或者波動dmesg | grep oom-killer
命令顯示OutOfMemory-killer
程式正在運行
我如何驗證這些?
如果想瞭解更多細節和做實驗測試磁碟緩存的影響,請看這個頁面。我做了少量的工作只是想讓你感激磁碟緩存,而不是讓你測試你的硬體速度提升了幾個數量級。