linux下使用free命令查看實際內存占用(可用內存)

linux下在終端環境下可以使用free命令看到系統實際使用內存的情況,一般用free -m方式查看內存占用情況(兆為單位)。而系統實際可用內存是不是free部分呢,不是的,系統實際內存占用以及可用內存有如下幾個加減法:

used=total-free??total=used+free

實際內存占用:used-buffers-cached?total-free-buffers-cached

實際可用內存:buffers+cached+free

?????????????????? total?????? used?????? free???? shared??? buffers???? cached

Mem:??????????? 128??????? 119????????? ?8????????? 0??????????? 1?????????????? 22

-/+ buffers/cache:????????95????????? 32

swap:????????? 255????????? ??0??????? ?255


第1行Mem數據:

total 內存總數: 128

used 已經使用的內存數: 119

free 空閑的內存數: 8

shared 當前已經廢棄不用,總是0

buffers Buffer Cache內存數: 1

cached Page Cache內存數: 22

第2行-/+ buffers/cache:

-buffers/cache 的內存數:95 (等于第1行的 used - buffers - cached)

+buffers/cache 的內存數: 32 (等于第1行的 free + buffers + cached)

可見-buffers/cache反映的是被程序實實在在吃掉的內存,而+buffers/cache反映的是可以挪用的內存總數。

第三行數據是交換分區SWAP的,也就是我們通常所說的虛擬內存。

為了提高磁盤存取效率, 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命令是一個顯示系統中空閑和已用內存大小的工具。free 命令的輸出和 top 命令相似。大多數Linux發行版已經含有 free 命令。

如何運行 free

想要運行,只需在控制臺輸入free即可。不帶選項運行會顯示一個以KB為單位的默認輸出。

$ free

從上面的截圖我們看到:

內存 (以KB計)

Total(全部) : 1026740

Used(已用) : 843396

Free(可用) : 183344

Shared(共享) : 0

Buffers(塊設備緩存區) : 52704

Cached(文件緩存) : 376384

譯注:關于Buffers和Cached的區別,來自http://www.taobaotesting.com/blogs/qa?bid=2265的一段解釋如下:

buffers是指用來給塊設備做的緩沖大小,他只記錄文件系統的metadata以及 tracking in-flight pages.

cached是用來給文件做緩沖。

那就是說:buffers是用來存儲,目錄里面有什么內容,權限等等。而cached直接用來記憶我們打開的文件

Swap (以KB計)

Total(全部) : 1045500

Used(已用) : 3376

Free(可用) : 1042124

當你看見 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,這里應該為輸入錯誤)。

間隔顯示 free

作為一個狀態檢查工具,最好的統計內存利用率的方法是使用延遲間隔。這么做的話,我們可以使用-s選項后面跟上我們想要間隔的N秒數。我們可以在后面合并幾個選項來使輸出滿足我們的需求。假如我們想要每3秒統計一次內存利用率并且適于人類可讀,那么就像這樣做:

$ free -hs 3

顯示高低內存利用率

如果我們想要知道高低內存統計,我們可以使用-l選項。下面是一個例子。

$ free -l

顯示 Linux 全部內存

如果我們需要每列的總計信息,我們可以在 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看?內存是否夠用的標準哦.

https://www.cnblogs.com/pengdonglin137/p/3315124.html

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,533評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,055評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,365評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,561評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,346評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,889評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,978評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,118評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,637評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,558評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,739評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,246評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,980評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,362評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,619評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,347評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,702評論 2 370

推薦閱讀更多精彩內容