Linux內建命令free的輸出詳解

來源:互聯網
上載者:User

Linux內建命令free的輸出詳解 背景:        最近協助QA測試自己開發的server模組,壓測下觀察進程記憶體使用量情況時,用到了linux系統內建指令free,不得不說,對於Linux新手來說,這個指令的輸出結果可能讓人摸不著頭腦。        為搞清出其輸出含義,查了一些資料,作為筆記,記錄於此,也希望能協助到同樣疑惑的新手。執行個體:        在運行server進程的機器命令列輸入:free -m // Note: -m 指定輸出資料以megabytes為單位進行顯示        輸出結果如下:                        total          used         free     shared    buffers     cached    Mem:         15360      13465       1894             0           45         9962    -/+ buffers/cache:         3456     11903    Swap:                 0               0              0    當我看到這個輸出時,比較茫然,大體來說,有3個主要疑問:        疑惑點1. 15G記憶體的機器,為何free memory只有1894M ? 剩餘的跑到哪裡去了?        疑惑點2.  buffers和cached是什麼意思?        疑惑點3.  -/+ buffers/cache是什麼意思?該行輸出的那兩列資料是怎麼計算出來的?數值表示的到底是什嗎?        不知所措?這時候,google該出手啦!    一番折騰,站在眾多大牛的肩膀上,現在終於搞明白了。調研資料:      1. 首先要對linux儲存管理有一定理解,下面的連結可以提供協助(之前有作業系統基礎的話,更容易理解)        關於linux kernel對機器記憶體的使用:        http://serverfault.com/questions/9442/why-does-red-hat-linux-report-less-free-memory-on-the-system-than-is-actually-av        大概意思就是,linux要最大程度地壓榨機器資源,所以即使機器剛啟動,其free memory也比預期的少很多,原因是作業系統把大部分的memory預先reserve起來,後續的記憶體配置由OS負責在這些reserved memory中進行調度或重分配       至此,第1個疑問有了答案    2. 關於buffers和cached的概念:       http://stackoverflow.com/questions/6345020/linux-memory-buffer-vs-cache       很多術語翻譯過來感覺不地道,所以建議直接看原帖的英文解釋       至此,第2個疑問亦有了答案    3. 內建命令free輸出-/+ buffers/cache行的含義       http://thoughtsbyclayg.blogspot.com/2008/09/display-free-memory-on-linux-ubuntu.html       最重要的一段摘出如下:       So really the buffers would be allocated to a running process if it asked for them anyway, and the memory being used to cache copies of recently used files would be released immediately if it makes sense to allocate the RAM elsewhere. So all that memory is 'available'.        Using these definitions:       When thinking about 'how much memory is really being used' - I want to calculate:          'used' - ('buffers' + 'cached')       When thinking about 'how much memory is really free' - I want to calculate:          'free' + ('buffers' + 'cached')       With this in mind, the meaning of the second row header form the output of the Linux command "free" (-/+ buffers/cache:) makes more sense...       至此,第3個疑問也解決了結果分析:    現在返回最初的問題,為便於分析,再次給出我測試機上free -m的輸出:                          total         used          free     shared    buffers     cached    Mem:         15360      13465        1894              0           45         9962    -/+ buffers/cache:         3456      11903    Swap:                 0               0               0    從輸出資料結合前面的調研結果,我們可以得到以下資訊:      1. 該機器實體記憶體共15360M,即15G,符合機器實際配置      2. 當前真正被使用的記憶體為 (13465 - 45 - 9962) M = 3458M,與-/+ buffers/cache行輸出的'used'列資料3456相符,有點誤差,可能是因為輸出的統計資料做了四捨五入之類的導致的(關於誤差,此處屬本人猜測,還沒有證實)      3. 當前真正可用記憶體為 (1894 + 45 + 9962) M = 11901M,與-/+ buffers/cache行輸出的'free'列資料11903相符(有少許誤差)    至此,我們可以清楚地意識到,free命令輸出的第1行中的'free'列並不是系統當前可以記憶體的數量,真正的資訊量都在第2行輸出呢,而且第2行的兩列資料是怎麼計算出來的,想必現在清楚了吧。觸類旁通:    在使用top命令的時候,是不是也對其輸出的一堆東西很茫然,通過上面對free命令輸出結果的分析,對top輸出的下面兩行所代表的含義就非常清楚了。     Mem:  15728640k total, 15648128k used,    80512k free,    48824k buffers     Swap:                0k total,                 0k used,             0k free, 12038836k cached 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.