【Linux】一步一步学Linux——free命令(80)
00. 目錄
文章目錄
- 00. 目錄
- 01. 命令概述
- 02. 命令格式
- 03. 常用選項
- 04. 參考示例
- 05. 附錄
01. 命令概述
free - 顯示系統中已用和未用的內存空間總和.
free 命令能夠顯示系統中物理上的空閑和已用內存,還有交換內存,同時,也能顯示被內核使用的緩沖和緩存。這些信息是通過解析文件 /proc/meminfo 而收集到的。
不帶任何選項運行 free 命令會顯示系統內存,包括空閑、已用、交換、緩沖、緩存和交換的內存總數。
02. 命令格式
free [參數]03. 常用選項
-b 選項 以字節為單位顯示內存總和; -k 選項(缺省的)以KB為單位顯示; -m 選項以MB 為單位.-t 選項 顯示 一個 總計行.-o 選項 禁止 "buffer adjusted" 行的顯示. 除非 指定 free 從 (相應的)已用/未用的 內存 減去/加上 緩沖區內存.-s 使 free 以 delay 秒為間隔, 連續抽樣顯示. delay 可以設置成浮點數,它用 usleep(3) 做 微秒級 延遲.-V 顯示版本信息.04. 參考示例
4.1 顯示內存使用情況
[deng@redhat ~]$ freetotal used free shared buff/cache available Mem: 2030172 1182004 106520 364548 741648 249164 Swap: 4194300 309248 3885052 [deng@redhat ~]$下面先解釋一下輸出的內容:
Mem 行(第二行)是內存的使用情況。
Swap 行(第三行)是交換空間的使用情況。
total 列顯示系統總的可用物理內存和交換空間大小。
used 列顯示已經被使用的物理內存和交換空間。
free 列顯示還有多少物理內存和交換空間可用使用。
shared 列顯示被共享使用的物理內存大小。
buff/cache 列顯示被 buffer 和 cache 使用的物理內存大小。
available 列顯示還可以被應用程序使用的物理內存大小。
4.2 以字節為單位顯示內存總和
[deng@redhat ~]$ free -btotal used free shared buff/cache available Mem: 2078896128 1211551744 107892736 373297152 759451648 253960192 Swap: 4294963200 316669952 3978293248 [deng@redhat ~]$4.3 用MB顯示內存使用情況
[deng@redhat ~]$ free -mtotal used free shared buff/cache available Mem: 1982 1154 103 356 724 242 Swap: 4095 302 3793 [deng@redhat ~]$4.4 用KB顯示內存使用情況
[deng@redhat ~]$ free -ktotal used free shared buff/cache available Mem: 2030172 1182240 106288 364548 741644 248932 Swap: 4194300 309248 3885052 [deng@redhat ~]$4.5 以總和的形式顯示內存的使用信息
[deng@redhat ~]$ free -ttotal used free shared buff/cache available Mem: 2030172 1182516 106012 364548 741644 248656 Swap: 4194300 309248 3885052 Total: 6224472 1491764 3991064 [deng@redhat ~]$4.6 周期性查詢內存使用情況
[deng@redhat ~]$ free -s 10total used free shared buff/cache available Mem: 2030172 1182512 106000 364548 741660 248656 Swap: 4194300 309248 3885052total used free shared buff/cache available Mem: 2030172 1182268 106248 364548 741656 248904 Swap: 4194300 309248 38850524.7 以GB為單位顯示內存使用情況(不常用)
[deng@redhat ~]$ free -gtotal used free shared buff/cache available Mem: 1 1 0 0 0 0 Swap: 3 0 3 [deng@redhat ~]$4.8 概念
buff/cache
先來提一個問題: buffer 和 cache 應該是兩種類型的內存,但是 free 命令為什么會把它們放在一起呢?要回答這個問題需要我們做些準備工作。讓我們先來搞清楚 buffer 與 cache 的含義。
buffer 在操作系統中指 buffer cache, 中文一般翻譯為 “緩沖區”。要理解緩沖區,必須明確另外兩個概念:“扇區” 和 “塊”。扇區是設備的最小尋址單元,也叫 “硬扇區” 或 “設備塊”。塊是操作系統中文件系統的最小尋址單元,也叫 “文件塊” 或 “I/O 塊”。每個塊包含一個或多個扇區,但大小不能超過一個頁面,所以一個頁可以容納一個或多個內存中的塊。當一個塊被調入內存時,它要存儲在一個緩沖區中。每個緩沖區與一個塊對應,它相當于是磁盤塊在內存中的表示
注意,buffer cache 只有塊的概念而沒有文件的概念,它只是把磁盤上的塊直接搬到內存中而不關心塊中究竟存放的是什么格式的文件。
cache 在操作系統中指 page cache,中文一般翻譯為 “頁高速緩存”。頁高速緩存是內核實現的磁盤緩存。它主要用來減少對磁盤的 I/O 操作。具體地講,是通過把磁盤中的數據緩存到物理內存中,把對磁盤的訪問變為對物理內存的訪問。頁高速緩存緩存的是內存頁面。緩存中的頁來自對普通文件、塊設備文件(這個指的就是 buffer cache 呀)和內存映射文件的讀寫。
頁高速緩存對普通文件的緩存我們可以這樣理解:當內核要讀一個文件(比如 /etc/hosts)時,它會先檢查這個文件的數據是不是已經在頁高速緩存中了。如果在,就放棄訪問磁盤,直接從內存中讀取。這個行為稱為緩存命中。如果數據不在緩存中,就是未命中緩存,此時內核就要調度塊 I/O 操作從磁盤去讀取數據。然后內核將讀來的數據放入頁高速緩存中。這種緩存的目標是文件系統可以識別的文件(比如 /etc/hosts)。
頁高速緩存對塊設備文件的緩存就是我們在前面介紹的 buffer cahce。因為獨立的磁盤塊通過緩沖區也被存入了頁高速緩存(緩沖區最終是由頁高速緩存來承載的)。
到這里我們應該搞清楚了:無論是緩沖區還是頁高速緩存,它們的實現方式都是一樣的。緩沖區只不過是一種概念上比較特殊的頁高速緩存罷了。
那么為什么 free 命令不直接稱為 cache 而非要寫成 buff/cache? 這是因為緩沖區和頁高速緩存的實現并非天生就是統一的。在 linux 內核 2.4 中才將它們統一。更早的內核中有兩個獨立的磁盤緩存:頁高速緩存和緩沖區高速緩存。前者緩存頁面,后者緩存緩沖區。當你知道了這些故事之后,輸出中列的名稱可能已經不再重要了。
free 與 available
在 free 命令的輸出中,有一個 free 列,同時還有一個 available 列。這二者到底有何區別?
free 是真正尚未被使用的物理內存數量。至于 available 就比較有意思了,它是從應用程序的角度看到的可用內存數量。Linux 內核為了提升磁盤操作的性能,會消耗一部分內存去緩存磁盤數據,就是我們介紹的 buffer 和 cache。所以對于內核來說,buffer 和 cache 都屬于已經被使用的內存。當應用程序需要內存時,如果沒有足夠的 free 內存可以用,內核就會從 buffer 和 cache 中回收內存來滿足應用程序的請求。所以從應用程序的角度來說,available = free + buffer + cache。請注意,這只是一個很理想的計算方式,實際中的數據往往有較大的誤差。
交換空間(swap space)
swap space 是磁盤上的一塊區域,可以是一個分區,也可以是一個文件。所以具體的實現可以是 swap 分區也可以是 swap 文件。當系統物理內存吃緊時,Linux 會將內存中不常訪問的數據保存到 swap 上,這樣系統就有更多的物理內存為各個進程服務,而當系統需要訪問 swap 上存儲的內容時,再將 swap 上的數據加載到內存中,這就是常說的換出和換入。交換空間可以在一定程度上緩解內存不足的情況,但是它需要讀寫磁盤數據,所以性能不是很高。
現在的機器一般都不太缺內存,如果系統默認還是使用了 swap 是不是會拖累系統的性能?理論上是的,但實際上可能性并不是很大。并且內核提供了一個叫做 swappiness 的參數,用于配置需要將內存中不常用的數據移到 swap 中去的緊迫程度。這個參數的取值范圍是 0~100,0 告訴內核盡可能的不要將內存數據移到 swap 中,也即只有在迫不得已的情況下才這么做,而 100 告訴內核只要有可能,盡量的將內存中不常訪問的數據移到 swap 中。在 ubuntu 系統中,swappiness 的默認值是 60。如果我們覺著內存充足,可以在 /etc/sysctl.conf 文件中設置 swappiness:
vm.swappiness=10如果系統的內存不足,則需要根據物理內存的大小來設置交換空間的大小。具體的策略網上有很豐富的資料,這里筆者不再贅述。
/proc/meminfo 文件
其實 free 命令中的信息都來自于 /proc/meminfo 文件。/proc/meminfo 文件包含了更多更原始的信息,只是看起來不太直觀
[deng@redhat ~]$ cat /proc/meminfo MemTotal: 2030172 kB MemFree: 106404 kB MemAvailable: 249092 kB Buffers: 0 kB Cached: 601692 kB SwapCached: 65440 kB Active: 1156056 kB Inactive: 463132 kB Active(anon): 1028612 kB Inactive(anon): 353432 kB Active(file): 127444 kB Inactive(file): 109700 kB Unevictable: 0 kB Mlocked: 0 kB SwapTotal: 4194300 kB SwapFree: 3885052 kB Dirty: 0 kB Writeback: 0 kB AnonPages: 953260 kB Mapped: 261540 kB Shmem: 364548 kB Slab: 139992 kB SReclaimable: 74568 kB SUnreclaim: 65424 kB KernelStack: 11120 kB PageTables: 53004 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 5209384 kB Committed_AS: 5646972 kB VmallocTotal: 34359738367 kB VmallocUsed: 179816 kB VmallocChunk: 34359310332 kB HardwareCorrupted: 0 kB AnonHugePages: 362496 kB CmaTotal: 0 kB CmaFree: 0 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB DirectMap4k: 118656 kB DirectMap2M: 1978368 kB DirectMap1G: 0 kB [deng@redhat ~]$05. 附錄
參考:【Linux】一步一步學Linux系列教程匯總
參考:百度百科
總結
以上是生活随笔為你收集整理的【Linux】一步一步学Linux——free命令(80)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Linux】一步一步学Linux——d
- 下一篇: 【Linux】一步一步学Linux——d