1. 程式人生 > >Ubuntu使用top/free檢視記憶體佔用大的原因

Ubuntu使用top/free檢視記憶體佔用大的原因

使用free/top檢視記憶體佔用的時候,嚇了一大跳,機器4GB的記憶體,顯示free空閒的記憶體只有300多M,查看了下程序,也沒有發現佔用大記憶體的應用啊。
查了些資料,分享給大家。
這裡寫圖片描述

其實原理用一句話就可以說明白:
就是
檢視結果中used已使用的記憶體表示總計分配給快取(包含buffers 與cache )使用的數量,但其中可能部分快取並未實際使用。

free結果的解釋:
Mem:表示實體記憶體統計
-/+ buffers/cached:表示實體記憶體的快取統計
Swap:表示硬碟上交換分割槽的使用情況,這裡我們不去關心。
系統的總實體記憶體:255268Kb(256M),但系統當前真正可用的記憶體b並不是第一行free 標記的 16936Kb,它僅代表未被分配的記憶體。
我們使用total1、used1、free1、used2、free2 等名稱來代表上面統計資料的各值,1、2 分別代表第一行和第二行的資料。
total1: 表示實體記憶體總量。
used1: 表示總計分配給快取(包含buffers 與cache )使用的數量,但其中可能部分快取並未實際使用。
free1: 未被分配的記憶體。
shared1: 共享記憶體,一般系統不會用到,這裡也不討論。
buffers1: 系統分配但未被使用的buffers 數量。
cached1: 系統分配但未被使用的cache 數量。buffer 與cache 的區別見後面。
cache 和 buffer的區別:


Cache: 快取記憶體,是位於CPU與主記憶體間的一種容量較小但速度很高的儲存器。由於CPU的速度遠高於主記憶體,CPU直接從記憶體中存取資料要等待一定時間周 期,Cache中儲存著CPU剛用過或迴圈使用的一部分資料,當CPU再次使用該部分資料時可從Cache中直接呼叫,這樣就減少了CPU的等待時間,提 高了系統的效率。Cache又分為一級Cache(L1 Cache)和二級Cache(L2 Cache),L1 Cache整合在CPU內部,L2 Cache早期一般是焊在主機板上,現在也都整合在CPU內部,常見的容量有256KB或512KB L2 Cache。
Buffer:緩衝區,一個用於儲存速度不同步的裝置或優先順序不同的裝置之間傳輸資料的區域。通過緩衝區,可以使程序之間的相互等待變少,從而使從速度慢 的裝置讀入資料時,速度快的裝置的操作程序不發生間斷。
緩衝(buffers)是根據磁碟的讀寫設計的,把分散的寫操作集中進行,減少磁碟碎片和硬碟的反覆尋道,從而提高系統性能。linux有一個守護程序定 期清空緩衝內容(即寫如磁碟),也可以通過sync命令手動清空緩衝。舉個例子吧:我這裡有一個ext2的U盤,我往裡面cp一個3M的MP3,但U盤的 燈沒有跳動,過了一會兒(或者手動輸入sync)U盤的燈就跳動起來了。解除安裝裝置時會清空緩衝,所以有些時候解除安裝一個裝置時要等上幾秒鐘。
修改/etc/sysctl.conf中的vm.swappiness右邊的數字可以在下次開機時調節swap使用策略。該數字範圍是0~100,數字越 大越傾向於使用swap。預設為60,可以改一下試試。
兩者都是RAM中的資料。簡單來說,buffer是即將要被寫入磁碟的,而cache是被從磁碟中讀出來的。
buffer是由各種程序分配的,被用在如輸入佇列等方面,一個簡單的例子如某個程序要求有多個欄位讀入,在所有欄位被讀入完整之前,程序把先前讀入的字 段放在buffer中儲存。
cache經常被用在磁碟的I/O請求上,如果有多個程序都要訪問某個檔案,於是該檔案便被做成cache以方便下次被訪問,這樣可提供系統性能。