free命令
[root@node8 ~]# free -h total used free shared buff/cache available Mem: 31G 9.7G 12G 3.5M 9.4G 20G Swap: 0B 0B 0B
total:表示 总计物理内存的大小。used+free+buff/cache
used:表示 已使用多少。
free:表示 可用内存多少。
Shared:表示多个进程共享的内存总额。
Buffers/cached:表示 磁盘缓存的大小。
buffer比较小:buffer cache,即缓存经常访问块设备的元数据
cache比较大: page cache,即缓存文件内容+slab。slab也分可回收和不可回收部分,可手动回收,但是会在回收缓存这段时间影响主机性能,并且不是有所的可回收slab和page cache都能被回收,正在使用的这些缓存不能被回收,否则系统的性能会很低,所以最后可能的内存是多少,就得评估能够回收的有多少,就有了下面这个参数
available: 是一个估计值,比较准确
- 注意
top和free看的结果一致;
free命令中used的结果,不包含buffer/cache
旧版本的free命令才有:-/+ buffers/cache,新版的加入了available参数
- 参考链接
vfs中各种cache的解释
- page cache
结合了虚拟内存和文件数据,将读取的文件数据缓存在虚拟内存,以便下次读取相同的内容时,直接从内存读取,加快数据访问速度
- inode cache
保存最近访问的文件i-odes
- buffer cache
buffer和块设备交互,缓存最近使用的磁盘块元数据,所以一般很小
Linux内核通过buffer cache读取文件数据,但是缓存到page cache中,以便再次使用
- directory cache
在内存中是一个树状结构,代表文件系统目录结构的一部分,其将会文件路径映射为inode并加速文件路径名的查找,就像dns的作用,根据域名找ip,directory cache的基本元素是d-entry
- 参考链接
https://zhuanlan.zhihu.com/p/250300261
slab
Linux内存管理模式,页式管理适合于大块内存的情形,而对于内核对象级别的较小内存情形下,不足以占用1个页。就用slab,lab一般对应1个或者多个页,slab里面存储一个个对象。
- 参考链接
https://www.mawenbao.com/research/linux-ate-my-memory.html
https://fivezh.github.io/2017/06/25/Linux-slab-info/
清除缓存
echo 3 > /proc/sys/vm/drop_caches