轉:http://blog.is36.com/linux_free_command_for_memory/node
linux下在終端環境下可使用free命令看到系統實際使用內存的狀況,通常用free -m方式查看內存佔用狀況(兆爲單位)。而系統實際可用內存是否是free部分呢,不是的,系統實際內存佔用以及可用內存有以下幾個加減法:linux
total used free shared buffers cached
Mem: 128 119 8 0 1 22
-/+ buffers/cache: 95 32
swap: 255 0 255windows
第1行Mem數據:緩存
第2行-/+ buffers/cache:bash
可見-buffers/cache反映的是被程序實實在在吃掉的內存,而+buffers/cache反映的是能夠挪用的內存總數。服務器
第三行數據是交換分區SWAP的,也就是咱們一般所說的虛擬內存。ide
爲了提升磁盤存取效率, Linux作了一些精心的設計, 除了對dentry進行緩存(用於VFS,加速文件路徑名到inode的轉換), 還採起了兩種主要Cache方式:Buffer Cache和Page Cache。前者針對磁盤塊的讀寫,後者針對文件inode的讀寫。這些Cache有效縮短了 I/O系統調用(好比read,write,getdents)的時間。工具
感興趣的能夠進一步參考文件/proc/meminfo,free命令就是根據它的信息生成的。free命令的源碼可從procps-xxx-.src.rpm獲取,xxx爲版本號,好比procps-3.2.3-5.3.src.rpm。性能
系統管理員必須維護他們服務器的健康運行。其中一個重要的部分就是內存。當服務器內存使用率太高時,它會下降服務器的性能。Linux有一個稱爲 free 的工具,來監控內存使用率。測試
free 命令是一個顯示系統中空閒和已用內存大小的工具。free 命令的輸出和 top 命令類似。大多數Linux發行版已經含有 free 命令。
想要運行,只需在控制檯輸入free 便可。不帶選項運行會顯示一個以KB爲單位的默認輸出。
$ free
從上面的截圖咱們看到:
譯註:關於Buffers和Cached的區別,來自 http://www.taobaotesting.com/blogs/qa?bid=2265 的一段解釋以下:
buffers是指用來給塊設備作的緩衝大小,他只記錄文件系統的metadata以及 tracking in-flight pages.
cached是用來給文件作緩衝。
那就是說:buffers是用來存儲,目錄裏面有什麼內容,權限等等。而cached直接用來記憶咱們打開的文件
當你看見 buffer/cache 的空閒空間低或者 swap 的空閒空間低,說明內存須要升級了。這意味這內存利用率很高。請注意 shared(共享)內存列應該被忽略 ,由於它已經被廢棄了。
如咱們先前提到的,默認 free 會以 KB 爲單位顯示信息。free 一樣提供給咱們 b (B), -k (KB), -m (MB), -g (GB) and –tera (TB)這些單位。要顯示咱們想要的單位,只要選擇一個並在 free 後面跟上。下面一個是以 MB 爲單位的輸出樣例。
$ free -m
這個技巧一樣適用於-b, -k, -g 以及 –tera 選項。
free 一樣提供了-h選項,這意味着適於人類可讀(譯註:系統上可能並不存在-h選項,已被-m取代)。那麼這與其它的選項有什麼不一樣呢,如-m(MB)選項? 可見的最大不一樣是-h選項會在數字後面加上適於人類可讀的單位。讓咱們看一個例子。
$ free -h
如咱們一塊兒看到的,在1,0數字後這裏是G(GB)字母。當數字並無達到GB時,free足夠聰明來知道並在每一個數字後面跟上合適的單位。後面的M - 數字929告訴咱們它有929MB(譯註: 原文爲929 number tell us its 969 Megabytes,這裏應該爲輸入錯誤)。
做爲一個狀態檢查工具,最好的統計內存利用率的方法是使用延遲間隔。這麼作的話,咱們可使用-s選項後面跟上咱們想要間隔的N秒數。咱們能夠在後面合併幾個選項來使輸出知足咱們的需求。假如咱們想要每3秒統計一次內存利用率而且適於人類可讀,那麼就像這樣作:
$ free -hs 3
若是咱們想要知道高低內存統計,咱們可使用-l選項。下面是一個例子。
$ free -l
若是咱們須要每列的總計信息,咱們能夠在 free 命令後面跟上 -t 選項。這會在字底部額外加入一行顯示。
$ free -t
除了vmstat之外,free 命令也是一個用於統計內存利用率的簡單統計工具。用這個你能夠快速查看你的 Linux 內存信息。free 命令使用 /proc/meminfo 做爲基準來顯示內存利用率信息。如往常同樣,你能夠在控制檯下輸入 man free 來獲取更多關於 free 的信息。
前段時間有個項目的用C寫的,性能測試時發現內存泄露問題。關於怎麼觀察內存使用問題,free是很好用的一個命令。
bash-3.00$ free
total used free shared buffers cached
Mem: 1572988 1509260 63728 0 62800 277888
-/+ buffers/cache: 1168572 404416
Swap: 2096472 16628 2079844
Mem:表示物理內存統計
-/+ buffers/cached:表示物理內存的緩存統計
Swap:表示硬盤上交換分區的使用狀況,這裏咱們不去關心。
系統的總物理內存:255268Kb(256M),但系統當前真正可用的內存b並非第一行free 標記的 16936Kb,它僅表明未被分配的內存。
第1行 Mem: total:表示物理內存總量。
used:表示總計分配給緩存(包含buffers 與cache )使用的數量,但其中可能部分緩存並未實際使用。
free:未被分配的內存。
shared:共享內存,通常系統不會用到,這裏也不討論。
buffers:系統分配但未被使用的buffers 數量。
cached:系統分配但未被使用的cache 數量。buffer 與cache 的區別見後面。 total = used + free 第2行 -/+ buffers/cached: used:也就是第一行中的used - buffers-cached 也是實際使用的內存總量。
free:未被使用的buffers 與cache 和未被分配的內存之和,這就是系統當前實際可用內存。 free 2= buffers1 + cached1 + free1 //free2爲第二行、buffers1等爲第一行
buffer 與cache 的區別
A buffer is something that has yet to be 「written」 to disk. A cache is something that has been 「read」 from the disk and stored for later use 第3行: 第三行所指的是從應用程序角度來看,對於應用程序來講,buffers/cached 是等於可用的,由於buffer/cached是爲了提升文件讀取的性能,當應用程序需在用到內存的時候,buffer/cached會很快地被回收。
因此從應用程序的角度來講,可用內存=系統free memory+buffers+cached.
接下來解釋何時內存會被交換,以及按什麼方交換。
當可用內存少於額定值的時候,就會開會進行交換.
如何看額定值(RHEL4.0):
#cat /proc/meminfo
交換將經過三個途徑來減小系統中使用的物理頁面的個數:
1.減小緩衝與頁面cache的大小,
2.將系統V類型的內存頁面交換出去,
3.換出或者丟棄頁面。(Application 佔用的內存頁,也就是物理內存不足)。
事實上,少許地使用swap是否是影響到系統性能的。
下面是buffers與cached的區別。
buffers是指用來給塊設備作的緩衝大小,他只記錄文件系統的metadata以及 tracking in-flight pages.
cached是用來給文件作緩衝。
那就是說:buffers是用來存儲,目錄裏面有什麼內容,權限等等。
而cached直接用來記憶咱們打開的文件,若是你想知道他是否是真的生效,你能夠試一下,前後執行兩次命令#man X ,你就能夠明顯的感受到第二次的開打的速度快不少。
實驗:在一臺沒有什麼應用的機器上作會看得比較明顯。記得實驗只能作一次,若是想多作請換一個文件名。
#free
#man X
#free
#man X
#free
你能夠前後比較一下free後顯示buffers的大小。
另外一個實驗:
#free
#ls /dev
#free
你比較一下兩個的大小,固然這個buffers隨時都在增長,但你有ls過的話,增長的速度會變得快,這個就是buffers/chached的區別。
由於Linux將你暫時不使用的內存做爲文件和數據緩存,以提升系統性能,當你須要這些內存時,系統會自動釋放(不像windows那樣,即便你有不少空閒內存,他也要訪問一下磁盤中的pagefiles)
使用free命令
將used的值減去 buffer和cache的值就是你當前真實內存使用 ————– 對操做系統來說是Mem的參數.buffers/cached 都是屬於被使用,因此它認爲free只有16936.
對應用程序來說是(-/+ buffers/cach).buffers/cached 是等同可用的,由於buffer/cached是爲了提升 程序執行的性能,當程序使用內存時,buffer/cached會很快地被使用。 因此,以應用來看看,以(-/+ buffers/cache)的free和used爲主.因此咱們看這個就行了.另外告訴你們 一些常識.Linux爲了提升磁盤和內存存取效率, Linux作了不少精心的設計, 除了對dentry進行緩存(用於 VFS,加速文件路徑名到inode的轉換), 還採起了兩種主要Cache方式:Buffer Cache和Page Cache。 前者針對磁盤塊的讀寫,後者針對文件inode的讀寫。這些Cache能有效縮短了 I/O系統調用(好比read,write,getdents)的時間。 記住內存是拿來用的,不是拿來看的.不象windows,不管你的真實物理內存有多少,他都要拿硬盤交換 文件來讀.這也就是windows爲何經常提示虛擬空間不足的緣由.大家想一想,多無聊,在內存還有大部分 的時候,拿出一部分硬盤空間來充當內存.硬盤怎麼會快過內存.因此咱們看linux,只要不用swap的交換 空間,就不用擔憂本身的內存太少.若是經常swap用不少,可能你就要考慮加物理內存了.這也是linux看 內存是否夠用的標準哦.