1、free 命令的選項
使用 free 命令查看服務器內存使用情況。
free [-b|-k|-m|-g|-h] [-l] [-o] [-t] [-s delay] [-c count] [-V]
(1)-b,-k,-m,-g 表示輸出顯示的單位為 bytes, KB, MB, or GB,不添加選項的話默認以 KB 為單位顯示
(2)-h 以人類可讀的方式顯示,即后邊會自動帶上單位
(3)-l 顯示詳細的低內存和高內存統計信息(增加了 Low 和High 這兩行顯示)
(4)-o 使用舊的格式顯示(不顯示 -/+buffers/cache 這一行)
(5)-t 增加顯示 Total 行,Total = Mem + Swap
(6)-s delay 每 delay 秒重復打印一次,delay 為具體的秒數
(7)-c count 重復打印 count 次后退出,count 為具體的次數。需要配合 -s delay 使用
(8)-V 顯示版本信息
2、free命令顯示結果
以下是我們測試環境的參數:
第一行Mem,表示物理內存統計:
(1)total 物理內存總量,total = used + free
(2)used 總計分配給緩存(包含 buffers 與 cache)使用的數量,但其中可能部分緩存並未實際使用
(3)free 未被分配的內存
(4)shared 共享內存,一般系統不會用到,總是0
(5)buffers 系統分配但未被使用的 buffers 數量
(6)cached 系統分配但未被使用的 cache 數量
第二行-/+ buffers/cache:
(1)used 實際使用的內存,等於第一行的 used - buffers - cached
(2)free 實際可用內存,等於第一行的 free + buffers + cached
第三行Swap表示交換區的使用情況,也就是我們通常所說的虛擬內存。
(1)total 總量
(2)used 使用
(3)free 空閑
3、linux的緩存設計
(1)Linux內存管理做了很多精心的設計,除了對dentry進行緩存(用於VFS,加速文件路徑名到inode的轉換),還采取了兩種主要Cache方式:Buffer Cache 和 Page Cache,目的就是為了提升磁盤IO的性能。
即 buffer (Buffer Cache) 用於存放要輸出到磁盤的數據,而 cache(Page Cache) 是從磁盤讀出存放到內存中等待以后使用的數據。它們的引入都是為了提升IO的性能。
(2)從低速的塊設備(硬盤)上讀取數據會暫時保存在內存中,即使數據在當時已經不再需要了,但在應用程序下一次訪問該數據時,它可以從內存中直接讀取,從而繞開低速的塊設備(硬盤),從而提高系統的整體性能。
Linux會充分利用這些空閑的內存,設計思想是內存空閑還不如拿來多緩存一些數據,等下次程序再次訪問這些數據速度就快了。
(3)如果程序要使用內存而系統中內存又不足時,這時不是使用交換分區,而是快速回收部分緩存,將它們留給用戶程序使用。
因此,可以看出,buffers/cached真是百益而無一害,真正的壞處可能讓用戶產生一種錯覺——Linux耗內存!其實不然,Linux並沒有吃掉你的內存,只要還未使用到交換分區,你的內存所剩無幾時,你應該感到高興,因為Linux緩存了大量的數據,也許下一次你就訪問的是這些緩存數據。
windows系統內存是軟件用多少給多少。而linux是你有多少物理內存,我全部用,正在運行的軟件占用的活動內存之外,其余空閑內存基本都被用來預加載了一些其他系統或者應用數據。這樣你打開軟件的時候才會很快。
內存閑着就是浪費,不如多放點數據,指不定下次需要訪問的數據就能夠直接從內存獲得而不用訪問很慢的硬盤。一定程度上說,linux和mac流暢度比windows好,這個占很重要一部分原因。
附錄:
下面這個是阿里雲服務器T5突發型實例的內存:顯示略有不同