Linux系統為什麼要吃掉我的「記憶體」

2022-09-26 14:09:16 字數 2217 閱讀 9326

在windows下資源管理器檢視記憶體使用的情況,如果使用率達到80%以上,再執行大程式就能感覺到系統不流暢了,因為在記憶體緊缺的情況下使用交換分割槽,頻繁地從磁碟上換入換出頁會極大地影響系統的效能。

而當我們使用free命令檢視linux系統記憶體使用情況時,會發現記憶體使用一直處於較高的水平,即使此時系統並沒有執行多少軟體。這正是windows和linux在記憶體管理上的區別,乍一看,linux系統吃掉我們的記憶體(linux ate my ram),但其實這也正是其記憶體管理的特點。

1. free命令

下面為使用free命令檢視我們實驗室檔案伺服器記憶體得到的結果,-m選項表示使用mb為單位:

輸出的第二行表示系統記憶體的使用情況:

mem: total(總量)= 31405mb,

used(已使用)= 30254mb,

free(空閒)= 1150mb,

shared(共享記憶體)= 12514mb,

buffers = 1122mb,

cached = 25424mb

注:前面四項都比較好理解,buffer 和 cache的區別在於:

a cache is someth程式設計客棧ing that has been 「read」 from the disk and stored for later use.

即buffer用於存放要輸出到磁碟的資料,而cache是從磁碟讀出存放到記憶體中待今後使用的資料。它們的引入均是為了提供io的效能。

輸出的第三行表示在第二行的基礎上-/+ buffers/cache得到的:

– buffers/cache used = mem used – buffers – cached = 30524mb – 1122mb – 25424mb = 3708mb

+ buffers/cache free = mem free + buffers + cached = 1150mb + 1122mb + 25424mb = 27696mb

輸出的第三行表示交換分割槽使用的情況:

swap:total(總量)= 15775mb

used(使用)= 596mb

free(空閒)= 4095mb

2. 記憶體的分類

這裡把記憶體分為三類,從使用者和作業系統的角度對其使用情況有不同的稱呼:

上表中something代表的正是free命令中」buffers/cached」的記憶體,由於這塊記憶體從作業系統的角度確實被使用,但如果使用者要使用,這塊記憶體是可以很快被**被使用者程式使用,因此從使用者角度這塊記憶體應劃為空閒狀態。

再次回到free命令輸出的結果,第三行輸出的結果應該就能理解了ukiconhba,這行的數字表示從使用者角度看系統記憶體的使用情況。因此,如果你用top或者free命令檢視系統的記憶體還剩多少,其實你應該將空閒記憶體加上buffer/cached的記憶體,那才是實際系統空閒的記憶體。

3. buffers/cached好處

linux記憶體管理做了很多精心的設計,除了對dentry進行快取(用於vfs,加速檔案路徑名到inode的轉換),還採取了兩種主要cache方式:buffer cache和page cache,目的就是為了提公升磁碟io的效能。從低速的塊裝置上讀取資料會暫時儲存在記憶體中,即使資料在當時已經不再需要了,但在應用程式下一次訪問該資料時,它可以從記憶體中直接讀取,從而繞開低速的塊裝置,從而提高系統的整體效能。

而linux會充分利用這些空閒的記憶體,設計思想是記憶體空閒還不如拿來多快取一些資料,等下次程式再次訪問這些資料速度就快了,而如果程式要使用記憶體而系統中記憶體又不足時,這時不是使用交換分割槽,而是快速**部分快取,將它們留給使用者程式使用。

因此,可以看出,buffers/cached真是百益而無一害,真正的壞處可能讓使用者產生一種錯覺——linux耗記憶體!其實不然,linux並沒有吃掉你的記憶體,只要還未使用到交換分割槽。

4. 實驗測試:先後讀入乙個大檔案,比較兩次讀入的時間

(1) 首先生成乙個1g的大檔案

dd if=/dev/zero of=bigfile bs=1m count=1000

(2) 清空快取

這程式設計客棧裡改為3後一定要改回0,要不下面測試結果就不準確了。

(3) 讀入這個檔案,測試消耗的時間

耗時24秒

(4) 再次讀入該檔案,測試消耗的時間

耗時17秒

從上面看出,第一次讀這個1g的檔案大約耗時24s,而第二次再次讀的時候,只耗時17s,有所下降。

總結本文標題: linux系統為什麼要吃掉我的「記憶體」

本文位址: /os/linux/266949.html

我為什麼不用 Linux 作為我的桌面系統

說起 linux,我還是用的比較早的。記得 2000 的時候,電腦報 上組織了乙個整版來介紹當時還鮮為人知的 linux。作為乙個喜歡 嘗鮮 的人,我趕緊去買了一張 紅帽子 6.0的正版光碟 是在聯邦軟體店裡買的,老闆說是正版,10元人民幣 回來裝。安裝還是很方便的,煩惱的是,不認識我的顯示卡和網絡...

為什麼我使用 Linux 開發

當我對 linux 的印象似乎還停留在黑乎乎的命令列介面上的時候,我身邊的一些朋友告訴我或者建議我使用 linux 時,我會一臉驚訝的問他,那個怎麼用 來開發或者日常使用 首先說說我每天打交道最多的 shell 吧,我給自己設定的預設 shell 是 fish。你還可以搭配 fzf 這個軟體,實現高...

為什麼要學習Linux系統?

首先我們要換乙個思路,不妨先談談語言的學習。我已經有了自己的母語,可是還是要學習英語。很多人的英語水平已經很厲害了。那麼讓我們靜下心來思考一下,學習英語對我們產生了那些影響。首先,我無形中深刻的了解了母語之外還有其他的語言 並且對語言有了自己的認識,對所用語言的國家的文化有了乙個大概的了解,相對的對...