Linux 的內存顯示只有 95% 被使用了,其他的呢?

#free 95%的內存都是used, 虛擬內存基本沒用.

使用 #top 命令查看, 上面的信息也表明95%內存被使用,

而cpu的使用率就很低(0.2%us).

但是下面進程信息表明大部分的進程都沒怎麼用內存(加在一起10%都不到),

那麼其他內存跑哪去了呢?


1.linux內存管理機制和windows是不同的。

  • Windows下,可以使用任務管理器查看當前進程對於內存的消耗情況。Windows物理內存總是留下一定的空間,就算此時物理內存有空閑時,也會讓某些程序去使用虛擬內存,目的是在Windows下啟動新程序時,直接分配空閑的物理內存,這樣新程序啟動速度就較快。但是這樣無論你的真實物理內存有多少,他都要拿硬碟交換文件來讀,硬碟又怎麼會快得過內存呢.

  • 而Linux則不然,在linux的內存分配機制中,優先使用物理內存,當物理內存還有空閑時,不會釋放其佔用的內存,所以讀寫數據是很快的。當內存使用緊缺時,才會調用swap空間。所以在linux下,只要不是常常大量的使用swap交換空間,就不用擔心自己的內存問題。

2.free -m 命令可以查看當前的內存使用情況,需要關注的是第三行的-/+ buffers/cache和第四行的Swap, 而不是第二行Mem。而sync命令可以強制將當前物理內存寫入硬碟中。

3.釋放內存本來就該是系統乾的事情,不應該讓用戶手動去隨意地維護,這個是系統級的安全設計要求,Windows下允許第三方軟體隨便清內存,這在操作系統設計的角度來說是個很大的隱患。所以Vista和Win7也已經開始規範這些。

內存是來用的,不是來看的,使用linux不用像windows那樣總喜歡空出一大塊內存才能心安,那樣是在浪費資源。


Linux中被使用過的內存是不會主動釋放的,會被當作cache用,到內存緊張的時候系統會自動清理緩存。你非要釋放內存就手動sync一下,方法請google。


一個虛擬的邏輯內存機制(通常比物理內存大得多),進程都基於這個虛擬內存,在進程運行時動態的將虛擬內存地址映射到實際的物理內存。

程序中產生的內存地址成為虛擬地址,他們構成了一個虛擬地址空間,虛擬地址被送到內存管理單元,映射成物理內存地址之後,再送到內存匯流排上。關於Linux內存那些事兒


推薦閱讀:

動態內存申請對齊有什麼意義?
在c++中,一個對象的內存分配問題?
電腦的主存儲器和主存、內存的關係是什麼?
為什麼沒有編程語言的內存管理是手動管理與自動垃圾回收相結合的?
linux怎麼管理空閑內存?

TAG:Linux | 內存管理 |