別慌! 你的內存很正常!
發生了什麼?
Linux正在借用未使用的內存用來作爲磁盤緩存。這會使得你的可用內存看起來會很少,但其實不是的,一切都很好!
爲什麼這樣做?
磁盤緩存會讓linux系統運行的更快,響應更積極!除了讓初學者感到困惑外,這樣做,沒什麼缺點!它不會以任何形式佔用應用程序的內存!
如果我想運行更多的應用程序呢?
如果你的應用程序想要更多的內存,它們只需要從借出的磁盤緩存中取回可用的數據塊即可。磁盤緩存
能立即還回內存給應用程序,你的內存並不低!
我需要更多的swap內存嗎?
不,磁盤緩存僅借用應用程序當前不需要的內存。它不會使用swap。如果應用程序需要更多內存,它們只需從磁盤緩存中取回內存。它們不會開始交換。
如何阻止Linux這樣做?
不能禁用磁盤緩存。任何人想要禁用磁盤緩存的唯一原因是,他們認爲這會從他們的應用程序中帶走內存,而事實並非如此! 磁盤緩存使應用程序加載更快,運行更流暢,但它永遠不會佔用內存! 因此,完全沒有理由禁用它!
如果不是,爲什麼‘top’ 和 ‘free’ 命令顯示的內存都已經被使用了?
這只是術語上的差異,你和linux都認爲應用程序佔用的內存是“used”的,而未用於任何事物的內存是“free”的。但是如何統計當前用於某事但仍可用於應用程序的內存呢?你可能認爲該內存是“used”或者是“available”。linux則稱之爲“used”,但是仍然是“available”。
內存 | 你叫它 | Linux 叫它 |
---|---|---|
被應用程序使用的 | Used | Used |
被使用了, 但是仍然是可用的 | Free (or Available) | Used(and Available) |
沒用被任何事物使用過的 | Free | Free |
這個“東西”(大概)就是top和free所稱的“緩衝區”和“緩存”。由於您和Linux的術語不同,您可能會認爲自己內存不足,但事實並非如此。
我怎麼知道我到底有多少空閒內存?
要查看您的應用程序在沒有swap的情況下可以使用多少內存,請運行free -m並查看“available”列:
$ free -m
total used free shared buff/cache available
Mem: 1504 1491 13 0 855 792
Swap: 2047 6 2041
如果你只是天真的看 “used” 和 “free” ,你會認爲你的內存已經使用了99%,但其實只使用了47%。如果你想要更詳細的關於 “available” 的統計說明,請參閱 the commit that added the field
我應該什麼時候開始擔心呢?
一個如果有足夠內存的健康的linux系統,在運行一段時間後,一般會出現以下預期的無害行爲:
- free 接近於0
- used 接近於 total
- available / free buffers/cache 有足夠空間,比如說20%
- swap used 不變
真正的內存不足的情形:
- available / free buffers/cache 接近於0
- swap used 在增加或者在波動
- dmesg | grep oom-killer 顯示 OutOfMemory-killer 在工作
我如何驗證這些東西?
有關更多詳細信息,以及如何試驗磁盤緩存以顯示這裏描述的效果,請參閱此頁。沒有什麼比在您自己的硬件上測量數量級的加速更能讓您欣賞磁盤緩存了!