Linux工具性能調優系列二:buffer和cache

一,案例入門

咱們來看一個例子,咱們來看free輸出,free採集數據來源是:/proc/meminfo文件,對於這個文件,會貫穿這個系列。html

root@szdc-calic-2-6:~# free
              total        used        free      shared  buff/cache   available
Mem:       32895096     1698396     8197904      307688    22998796    30343448
Swap:      31250428      114992    31135436
複製代碼

從上面的輸出咱們能夠獲得什麼呢?系統當前內存是否夠用?什麼是buffer,什麼是cache,當前可分配的內存還剩下多少?帶着這些問題,咱們接着往下看。node

二,cache和buffer

2.1 cache

2.1.1 定義

首先明確一點,在內存管理中,cache指的是:page cache。page cache即頁面高速緩存,是針對文件系統的,存儲的是文件的文件數據(文件分爲元數據和文件數據)。linux

2.1.2 哪些cache沒法被回收

咱們執行回收cache命令緩存

[root@k8s-dbg-master-1 ~]# echo 3 > /proc/sys/vm/drop_caches
[root@k8s-dbg-master-1 ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:          32117        8622         720       16056       22773         949
Swap:         16383         216       16167
複製代碼

從上面咱們知道,即便咱們執行清理cache命令,仍然有部分cache沒法回收,這些沒法回收的包括:tmpfs,共享內存,mmap申請標誌狀態爲MAP_SHARED的內存。這塊不深刻講解,有興趣的再去本身嘗試下。bash

2.2,buffer

2.2.1 定義

(1) 在內存管理中,buffer指的是:buffer cache。buffer cache是是塊設備的讀寫緩衝區。咱們繼續補充知識,操做系統是以塊的概念操做磁盤的,一個塊會包含一個或者多個扇區,可是不會超過一個頁面大小。spa

(2) buffers主要用於緩存文件系統中的元數據信息(dentries、inodes),和另一些不是文件數據的塊,例如metadata和raw block I/O,所以仍是須要單獨用buffer cache來緩存。操作系統

2.3 二者之間的關係

在內核2.6之後,二者結構進行統一,都是page cache,page中含有一個個的buffer結構,因此咱們的free命令中,也將二者進行統一。二者是配合使用的,當咱們對一個文件進行寫操做時候,page cache的內容會被改變,而buffer cache則能夠將page標記不一樣的緩衝區(buffer),並記錄哪一個塊被修改,這樣,髒數據回寫時候,就不用回寫整個page,而只要回寫修改的塊。code

三,案例分析

3.1 案例分析

咱們將直接使用案例對cache進行分析,看看操做系統中會如何使用。事先準備一個大文件,對大文件進行讀操做。htm

(1) 手動清空cache

[root@k8s-dbg-master-1 ~]# echo 3 > /proc/sys/vm/drop_caches 

[root@k8s-dbg-master-1 ~]# cat /proc/meminfo
MemTotal:       32887860 kB
MemFree:        15764108 kB
MemAvailable:   17081976 kB
Buffers:            1792 kB
Cached:          1191456 kB
複製代碼

(2) 執行命令及結果

[root@k8s-dbg-master-1 ~]# cp hyperkube /tmp/hyperkube
[root@k8s-dbg-master-1 ~]# cat /proc/meminfo
MemTotal:       32887860 kB
MemFree:        15240656 kB
MemAvailable:   17092320 kB
Buffers:           18016 kB
Cached:          1708088 kB
複製代碼

能夠看到,cached和buffer都增多blog

四,問題

1,如今試着回答剛開始提出的問題:目前的系統內存狀況是怎麼樣的

五,參考文獻

1,www.cnblogs.com/sparkdev/p/…

2,linuxperf.com/?p=142

相關文章
相關標籤/搜索