每次使用free時都比較迷惑,對於上面的內容一直都不是很清楚,今天仔細查了以下,和大家一起分享以下:
先看一下free的運行結果:

free打印出的內存信息主要分為兩種,一種是安裝的內存,一種是用磁盤虛擬的內存,就是這里的Swap,相信裝過Linux系統的同學肯定不陌生交換分區,這里Swap大小就是我們分區的時候分配的大小。
下面來分別解釋以下每個列的意思:
total:去掉為硬件和操作系統保留的內存后剩余的內存總量。許多人奇怪自己的電腦安裝了一共8G的內存,但是顯示總共只有七點幾G的,現在應該沒什么疑惑了把,不管Linux還是Windows都會有部分內存是保留給硬件和操作系統的! userd:當前已使用的內存總量。 free:空閑的或可以使用的內存總量 shared:共享內存大小,主要用於進程間通信 buff(buffers):主要用於塊設備數據緩沖,例如記錄文件系統的metadata(目錄、權限等等信息)。 cache:主要用於文件內容緩沖 available:可以使用的內存總量
buffers與cached的區別:
對於應用程序來說,buffers/cached 是等於可用的,因為buffer/cached是為了提高文件讀取的性能,當應用程序需在用到內存的時候,buffer/cached會很快地被回收。
所以從應用程序的角度來說 可用內存=系統free memory+buffers+cached. buffers是指用來給塊設備做的緩沖大小,他只記錄文件系統的metadata以及 tracking in-flight pages,cached是用來給文件做緩沖。 那就是說:buffers是用來存儲,目錄里面有什么內容,權限等等,而cached直接用來記憶我們打開的文件的。 關於為什么需要緩沖,這里簡單解釋以下:我們知道,在CPU,內存,外存的運行速度之間,存在這樣的關系: CPU比內存快100倍,內存比磁盤快十萬倍,且他們之間的差距還在增大! 因此為了協調他們速度之間的不匹配,緩存就由此而生,在CPU內部的緩存,為了協調CPU和內存之間速度的不匹配,而內存的產生也是為了協調磁盤和CPU速度的不匹配。有個這樣的一個形象的描述:把CPU的一個時鍾周期看作一秒。那么,從L1 cache(CPU的一級緩存)讀取信息就好像是拿起桌上的一張草稿紙(3秒);從L2 cache(CPU的二級緩存)讀取信息則是從身邊的書架上取出一本書(14秒);而從主存中讀取信息則相當於走到辦公樓下去買個零食(4分鍾),而等待硬盤尋道的時間相當於離開辦公大樓並開始長達一年零三個月的環球旅行,而這僅僅是尋道時間!
free的詳細使用方法
語 法: free [-hbkmotV][-s <間隔秒數>]
補充說明:free指令會顯示內存的使用情況,包括實體內存,虛擬的交換文件內存,共享內存區段,以及系統核心使用的緩沖區等。
參 數:
-b 以Byte為單位顯示內存使用情況。 -k 以KB為單位顯示內存使用情況。 -m 以MB為單位顯示內存使用情況。 -h 以比較人性化的方式顯示內存使用情況。 -o 不顯示緩沖區調節列。 -s <間隔秒數> 持續觀察內存使用狀況。 -t 顯示內存總和列。 -V 顯示版本信息。
free的實現方式
關於free的實現,其實是調用linux下的/proc/meminfo文件
可以對比一下:
zhoupan@Lenovo-G485:~$ free
total used free shared buff/cache available
Mem: 3636688 2286620 240768 79560 1109300 1210716 Swap: 1998844 0 1998844 zhoupan@Lenovo-G485:~$ cat /proc/meminfo MemTotal: 3636688 kB MemFree: 239996 kB MemAvailable: 1209972 kB Buffers: 96424 kB Cached: 912480 kB SwapCached: 0 kB Active: 2535176 kB Inactive: 646160 kB Active(anon): 2174012 kB Inactive(anon): 77972 kB Active(file): 361164 kB Inactive(file): 568188 kB Unevictable: 448 kB Mlocked: 448 kB SwapTotal: 1998844 kB SwapFree: 1998844 kB Dirty: 60 kB Writeback: 0 kB AnonPages: 2172872 kB Mapped: 397968 kB Shmem: 79560 kB Slab: 100424 kB SReclaimable: 68764 kB SUnreclaim: 31660 kB KernelStack: 8896 kB PageTables: 42788 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 3817188 kB Committed_AS: 6151536 kB VmallocTotal: 34359738367 kB VmallocUsed: 0 kB VmallocChunk: 0 kB HardwareCorrupted: 0 kB AnonHugePages: 1112064 kB CmaTotal: 0 kB CmaFree: 0 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB DirectMap4k: 175872 kB DirectMap2M: 3602432 kB DirectMap1G: 0 kB >>由於系統在高速的運轉,可能存在部分數據不相同
