free命令
>free
total used free shared buff/cache available
Mem: 8010968 935180 5968260 16668 1107528 6835728
Swap: 4194300 0 4194300
free 輸出的是一個表格贵试,其中的數(shù)值都默認以字節(jié)為單位琉兜,free 顯示的是整個系統(tǒng)的內(nèi)存使用情況。每列數(shù)據(jù)的含義分別為:
total 是總內(nèi)存大斜胁!豌蟋;
used: 是已使用內(nèi)存的大小,包含了共享內(nèi)存桑滩;
free: 是未使用內(nèi)存的大形嗥!;
shared: 是共享內(nèi)存的大小往声;
buff/cache: 是緩存和緩沖區(qū)的大欣拚摇;
available: 是新進程可用內(nèi)存的大小浩销。
available 不僅包含未使用內(nèi)存贯涎,還包括了可回收的緩存,所以一般會比未使用內(nèi)存更大
Buffers/Cache
數(shù)據(jù)來源
- Buffers 是內(nèi)核緩沖區(qū)用到的內(nèi)存慢洋,對應的是/proc/meminfo 中的 Buffers 值塘雳。
- Cache 是內(nèi)核頁緩存和 Slab 用到的內(nèi)存,對應的是/proc/meminfo 中的 Cached 與 與 SReclaimable 之和
proc 文件系統(tǒng)
- proc文件系統(tǒng)介紹
/proc 是 Linux 內(nèi)核提供的一種特殊文件系統(tǒng)普筹,是用戶跟內(nèi)核交互的接口败明,用戶可以從 /proc 中查詢內(nèi)核的運行狀態(tài)和配置選項,查詢進程的運行狀態(tài)太防、統(tǒng)計數(shù)據(jù)等;
可以通過/proc 來修改內(nèi)核的配置;
proc文件系統(tǒng)同時也是很多性能工具的最終數(shù)據(jù)來源妻顶,比如我們剛看到的free,就是通過讀取/proc/meminfo 蜒车,得到內(nèi)存的使用情況
- /proc/meminfo
> man proc
Buffers %lu
Relatively temporary storage for raw disk blocks that shouldn't get tremendously large (20MB or so).
Cached %lu
In-memory cache for files read from the disk (the page cache). Doesn't include SwapCached.
...
SReclaimable %lu (since Linux 2.6.19)
Part of Slab, that might be reclaimed, such as caches.
SUnreclaim %lu (since Linux 2.6.19)
Part of Slab, that cannot be reclaimed on memory pressure.
Buffers 是對原始磁盤塊的臨時存儲讳嘱,也就是用來緩存磁盤的數(shù)據(jù),通常不會特別大(20MB 左右)酿愧。這樣沥潭,內(nèi)核就可以把分散的寫集中起來,統(tǒng)一優(yōu)化磁盤的寫入嬉挡,比如可以把多次小的寫合并成單次大的寫等
Cached 是從磁盤讀取文件的頁緩存钝鸽,也就是用來緩存文件讀取的數(shù)據(jù)。這樣庞钢,下次訪問這些文件數(shù)據(jù)時拔恰,就可以直接從內(nèi)存中快速獲取,而不需要再次訪問緩慢的磁盤
SReclaimable 是 Slab 的一部分焊夸。Slab 包括兩部分仁连,其中的可回收部分,用 SReclaimable 記錄阱穗;而不可回收部分饭冬,用 SUnreclaim 記錄
Buffer 是對磁盤數(shù)據(jù)的緩存,而 Cache 是文件數(shù)據(jù)的緩存揪阶,它們既會用在讀請求中昌抠,也會用在寫請求中
關于磁盤和文件的區(qū)別
- 磁盤是一個塊設備,可以劃分為不同的分區(qū)鲁僚;在分區(qū)之上再創(chuàng)建文件系統(tǒng)炊苫,掛載到某個目錄裁厅,之后才可以在這個目錄中讀寫文件。
- 其實 Linux 中“一切皆文件”侨艾,而文章中提到的“文件”是普通文件执虹,磁盤是塊設備文件
- 在讀寫普通文件時,會經(jīng)過文件系統(tǒng)唠梨,由文件系統(tǒng)負責與磁盤交互袋励;而讀寫磁盤或者分區(qū)時,就會跳過文件系統(tǒng)当叭,也就是所謂的“裸I/O“茬故。這兩種讀寫方式所使用的緩存是不同的,也就是文中所講的 Cache 和 Buffer 區(qū)別蚁鳖。