Linux命令之free

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参数

 

  • 参考链接

free(1) - Linux manual page

 


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
上一篇:Effective Java 51 Beware the performance of string concatenation


下一篇:Linux系统分析工具之slabtop