free命令
>free
total used free shared buff/cache available
Mem: 8010968 935180 5968260 16668 1107528 6835728
Swap: 4194300 0 4194300
free 輸出的是一個表格,其中的數(shù)值都默認(rèn)以字節(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: 是新進(jìn)程可用內(nèi)存的大小。
available 不僅包含未使用內(nèi)存,還包括了可回收的緩存,所以一般會比未使用內(nèi)存更大
Buffers/Cache
數(shù)據(jù)來源
- Buffers 是內(nèi)核緩沖區(qū)用到的內(nèi)存,對應(yīng)的是/proc/meminfo 中的 Buffers 值。
- Cache 是內(nèi)核頁緩存和 Slab 用到的內(nèi)存,對應(yīng)的是/proc/meminfo 中的 Cached 與 與 SReclaimable 之和
proc 文件系統(tǒng)
- proc文件系統(tǒng)介紹
/proc 是 Linux 內(nèi)核提供的一種特殊文件系統(tǒng),是用戶跟內(nèi)核交互的接口,用戶可以從 /proc 中查詢內(nèi)核的運行狀態(tài)和配置選項,查詢進(jìn)程的運行狀態(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ù)的緩存,它們既會用在讀請求中,也會用在寫請求中
關(guān)于磁盤和文件的區(qū)別
- 磁盤是一個塊設(shè)備,可以劃分為不同的分區(qū);在分區(qū)之上再創(chuàng)建文件系統(tǒng),掛載到某個目錄,之后才可以在這個目錄中讀寫文件。
- 其實 Linux 中“一切皆文件”,而文章中提到的“文件”是普通文件,磁盤是塊設(shè)備文件
- 在讀寫普通文件時,會經(jīng)過文件系統(tǒng),由文件系統(tǒng)負(fù)責(zé)與磁盤交互;而讀寫磁盤或者分區(qū)時,就會跳過文件系統(tǒng),也就是所謂的“裸I/O“。這兩種讀寫方式所使用的緩存是不同的,也就是文中所講的 Cache 和 Buffer 區(qū)別。