[譯] Linux吃掉了我的內存


英文原文: https://www.linuxatemyram.com/
作者: Vidar Holen
譯者: thinkam

發生了什么?

Linux正借用你未使用的內存來做磁盤緩存。這使你的計算機看起來可用內存很少,但事實不是這樣!一切都很正常!

為什么這么做?

磁盤緩存使你的系統運行更快更流暢!除了使新手感到困惑,這沒什么缺點。它從來沒有以任何方式從你的應用拿走內存。

如果我想運行更多的應用該怎么辦?

如果你的應用想要獲取更多的內存,系統會從磁盤緩存中拿走一塊被借用的內存。磁盤緩存會立即還給應用!你的計算機可用內存的並不少!

我需要更多的交換分區(swap)嗎?

不需要,磁盤緩存僅會借用應用目前不需要的內存。它不會使用交換分區。如果應用需要更多的內存,系統會從磁盤緩存中拿回來。系統不會使用交換分區。

我如何讓Linux停止這樣做?

你不能禁用磁盤緩存。任何人想要禁用磁盤緩存的唯一理由是他認為這從他的應用中拿走了內存,但事實不是這樣!磁盤緩存可以讓應用加載更快並且運行更加流暢,但它卻從來沒有拿走內存!因此,沒有任何理由去禁用它!

如果不是這樣,為什么topfree命令說我所有的內存已被使用?

這僅僅是用辭的差異。你和Linux系統一致認為被應用占用的內存稱為used,而沒有被任何程序使用的部分稱為free

但是,你認為目前被占用但仍然可以被應用使用的內存稱作什么呢?

你可能認為這部分內存是freeavailable。而Linux系統稱它usedavailable:

內存 你稱它 Linux稱它
被應用使用 used used
被占用,但可以使用 free(或available) used(或available)
沒有用來做任何事 free free

譯注:老版free命令中被占用但可以使用的內存稱為used(used中的一部分,即buffers+cached), 而新版的free命令中稱之為available

不嚴格來講,topfree命令稱這部分內存為bufferscached。因為你和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為單位的答案。如果你天真地查看usedfree,你會認為你的內存幾乎快占滿達到99%,然而實際僅僅只有47%!

如果想查看更詳細、更專業的關於Linux統計available內存大小的描述,請看 the commit that added the field.

什么時候我該開始擔心?

一個擁有足夠內存的、運行良好的Linux系統在運行一段時間后會表現出以下預期的無害特征:

  • free內存接近於0
  • used內存接近總共內存
  • available內存(或者是free + buffers/cache)有足夠空間(比如說:總內存的20%以上)
  • swap used沒有發生變化

真正的內存不夠、你也許想調查原因的情形,警告標志如下:

  • available內存(或者是free + buffers/cache)接近於0
  • swap used在增加或者波動
  • dmesg | grep oom-killer命令顯示OutOfMemory-killer程序正在運行

我如何驗證這些?

如果想了解更多細節和做實驗測試磁盤緩存的影響,請看這個頁面。我做了少量的工作只是想讓你感激磁盤緩存,而不是讓你測試你的硬件速度提升了幾個數量級。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM