1. 程式人生 > >如何理解Linux下,使用top命令看到記憶體佔用情況

如何理解Linux下,使用top命令看到記憶體佔用情況

linux 下使用top命令之後看到記憶體佔用情況如下:

Mem:  32849260k total, 32630656k used,   218604k free,   445512k buffers
Swap:        0k total,        0k used,        0k free, 12864484k cached

乍一看只有2G的記憶體剩餘,但是真的只有2G的記憶體了嗎?因為看到cached 佔用12G,再使用free -m 之後看到的情況

             total       used       free     shared    buffers     cached
Mem:         32079      30975       1103          0        417      11582
-/+ buffers/cache:
18975 13103
Swap: 0 0 0

已經使用的30G記憶體中看到12G 為cached部分,真正使用的是18G,那麼是否可用記憶體就是有14G呢?

首先了解下Linux記憶體分配機制
在linux的記憶體分配機制中,優先使用實體記憶體,當實體記憶體還有空閒時(還夠用),不會釋放其佔用記憶體,就算佔用記憶體的程式已經被關閉了,該程式所佔用的記憶體用來做快取使用,對於開啟過的程式、或是讀取剛存取過得資料會比較快。

因此cached部分是可以釋放掉重新使用的,但是cached部分可以全部釋放出來嗎?

首先了解下什麼是cache 和buffer:


1、Buffer(緩衝區)是系統兩端處理速度平衡(從長時間尺度上看)時使用的。它的引入是為了減小短期內突發I/O的影響,起到流量整形的作用。比如生產者——消費者問題,他們產生和消耗資源的速度大體接近,加一個buffer可以抵消掉資源剛產生/消耗時的突然變化。
2、Cache(快取)則是系統兩端處理速度不匹配時的一種折衷策略。因為CPU和memory之間的速度差異越來越大,所以人們充分利用資料的區域性性(locality)特徵,通過使用儲存系統分級(memory hierarchy)的策略來減小這種差異帶來的影響。
3、假定以後儲存器訪問變得跟CPU做計算一樣快,cache就可以消失,但是buffer依然存在。比如從網路上下載東西,瞬時速率可能會有較大變化,但從長期來看卻是穩定的,這樣就能通過引入一個buffer使得OS接收資料的速率更穩定,進一步減少對磁碟的傷害。

因此cache 可以回收,但是不全都能回收
具體可參考連結,不展開了

參考連結:
正確理解Linux記憶體佔用過高的問題:http://blog.licess.com/linux-memory/
Linux 記憶體中的Cache,真的能被回收麼?:https://www.cnblogs.com/276815076/p/5478966.html
Cache 和 Buffer 都是快取,主要區別是什麼?:https://www.zhihu.com/question/26190832/answer/32387918