博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux工具性能调优系列二:buffer和cache
阅读量:6682 次
发布时间:2019-06-25

本文共 2050 字,大约阅读时间需要 6 分钟。

一,案例入门

我们来看一个例子,我们来看free输出,free采集数据来源是:/proc/meminfo文件,对于这个文件,会贯穿这个系列。

root@szdc-calic-2-6:~# free              total        used        free      shared  buff/cache   availableMem:       32895096     1698396     8197904      307688    22998796    30343448Swap:      31250428      114992    31135436复制代码

从上面的输出我们可以得到什么呢?系统当前内存是否够用?什么是buffer,什么是cache,当前可分配的内存还剩下多少?带着这些问题,我们接着往下看。

二,cache和buffer

2.1 cache

2.1.1 定义

首先明确一点,在内存管理中,cache指的是:page cache。page cache即页面高速缓存,是针对文件系统的,存储的是文件的文件数据(文件分为元数据和文件数据)。

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   availableMem:          32117        8622         720       16056       22773         949Swap:         16383         216       16167复制代码

从上面我们知道,即使我们执行清理cache命令,仍然有部分cache无法回收,这些无法回收的包括:tmpfs,共享内存,mmap申请标志状态为MAP_SHARED的内存。这块不深入讲解,有兴趣的再去自己尝试下。

2.2,buffer

2.2.1 定义

(1) 在内存管理中,buffer指的是:buffer cache。buffer cache是是块设备的读写缓冲区。我们继续补充知识,操作系统是以块的概念操作磁盘的,一个块会包含一个或者多个扇区,但是不会超过一个页面大小。

(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,而只要回写修改的块。

三,案例分析

3.1 案例分析

我们将直接使用案例对cache进行分析,看看操作系统中会如何使用。事先准备一个大文件,对大文件进行读操作。

(1) 手动清空cache

[root@k8s-dbg-master-1 ~]# echo 3 > /proc/sys/vm/drop_caches       [root@k8s-dbg-master-1 ~]# cat /proc/meminfoMemTotal:       32887860 kBMemFree:        15764108 kBMemAvailable:   17081976 kBBuffers:            1792 kBCached:          1191456 kB复制代码

(2) 执行命令及结果

[root@k8s-dbg-master-1 ~]# cp hyperkube /tmp/hyperkube[root@k8s-dbg-master-1 ~]# cat /proc/meminfoMemTotal:       32887860 kBMemFree:        15240656 kBMemAvailable:   17092320 kBBuffers:           18016 kBCached:          1708088 kB复制代码

可以看到,cached和buffer都增多

四,问题

1,现在试着回答刚开始提出的问题:目前的系统内存情况是怎么样的

五,参考文献

1,

2,

转载地址:http://jdaao.baihongyu.com/

你可能感兴趣的文章
HTML5学习笔记(二)——表单1
查看>>
我的友情链接
查看>>
docker笔记
查看>>
三层交换机与路由器的相关配置
查看>>
html表单笔记
查看>>
我的友情链接
查看>>
nginx负载均衡的5种策略
查看>>
MyBatis学习总结(三)——优化MyBatis配置文件中的配置
查看>>
jsoup使用post方式查询和解析json
查看>>
翻译软件开发(do it yourself)
查看>>
《Java程序员的基本修养》读书笔记之内存回收
查看>>
鸟哥私房菜重温6
查看>>
适用于ASP等环境的JS日期选择控件
查看>>
rpm 与 yum 用法
查看>>
Oracle数据库新版本12c信息汇总
查看>>
【Oracle Database 12c新特性】 In-Database Archiving数据库内归档
查看>>
运维自动化之psutil模块
查看>>
mysql的复制原理以及复制类型
查看>>
iOS开发系统类功能划分
查看>>
知道IP地址的情况下,如何查看主机名
查看>>