Linux内存[buff/cache]占用过高分析和优化

本文介绍了Linux系统中内存管理的问题现场分析,特别是针对页面缓存的管理与优化方法。通过监控系统负载和I/O情况,分析了导致内存占用过高的根本原因,并提供了具体的解决策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题现场

查看系统内存的使用状态
linux-buff-free.jpg
监控报警可用内存空间不足,常规的解决方案如下:

  1. 增加内存(增加成本)
  2. 增加虚拟内存(影响性能)
  3. 定期清理缓存(echo 1 > /proc/sys/vm/drop_caches)

本文将介绍定期清除页面缓存,但是过会儿内存又被占满问题的分析。

问题分析

  1. 通过监控系统负载情况(vmstat 1),确定是页面缓存(cache项)占用量大,并且释放页面缓存后从块设备读入数据量(bi项)会马上增加。
    linux-buff-vmstat.jpg

  2. 通过监控io情况(iostat -x -k 1)也可以看出
    linux-buff-iostat.jpg

  3. 基于此可以猜测是有进程在频繁的读取文件导致,监视磁盘I/O使用状况(iotop -oP),释放页面缓存后有几个sed命令读取文件进程占用IO很高。
    linux-buff-iotop.jpg

  4. 至此结合业务分析是因为每分钟读取日志统计指标导致

扩展知识

/proc/meminfo

查看更详细的内存信息:
$ cat /proc/meminfo |grep -E "Buffer|Cache|Swap|Mem|Shmem|Slab|SReclaimable|SUnreclaim"
linux-buff-meminfo.jpg

  • MemFree:空闲的物理内存
  • MemAvailable:可用的物理内存,MemFree+Buffers+Cached
  • Buffers:(Buffer Cache)对磁盘块设备数据的缓存
  • Cached:(Page Cache)对文件系统上文件数据的缓存,MemFree+SReclaimable
  • SwapTotal:虚拟内存,利用磁盘空间虚拟出的一块逻辑内存
  • Slab:Linux内存管理机制
  • SReclaimable:Slab可回收部分
  • SUnreclaim:Slab不可回收部分
  • Shmem:进程间共同使用的共享内存

/proc/sys/vm/drop_caches

清除缓存策略:
1:清除page cache
2:清除slab分配器中的对象(包括目录项和inode)
3:清除page cache和slab分配器中的对象

参考

OOM killer及Overcommit
Linux buffer/cache 内存占用过高的原因以及解决办法
Linux查看Buffer&Cache被哪些进程占用

Linux 系统中,buff/cache 是操作系统用来缓存磁盘数据的一种机制。当应用程序需要读取磁盘上的数据时,Linux 会先将这些数据缓存到内存中,以提磁盘读取速度。当应用程序需要使用内存时,缓存数据会被清除,将内存返还给应用程序使用。 如果 buff/cache 内存占用,有几种可能的解决办法: 1. 调整 vm.dirty_ratio vm.dirty_background_ratio 参数 vm.dirty_ratio 指定了内存中脏数据所占的最大比例,默认值为 20,意味着当内存中脏数据占用超过 20% 时,系统会开始写入磁盘。vm.dirty_background_ratio 指定了内存中脏数据所占的最小比例,默认值为 10,意味着当内存中脏数据占用低于 10% 时,系统会开始写入磁盘。 可以通过修改这两个参数的值来调整 buff/cache 内存占用。例如,将 vm.dirty_ratio vm.dirty_background_ratio 的值都设置为 5,则系统会更频繁地把脏数据写入磁盘,从而减少内存中的缓存数据。 2. 调整 swappiness 参数 swappiness 是一个控制系统将内存中的数据交换到交换空间的程度的参数。默认值为 60,意味着当内存使用率达到 60% 时,系统会开始把一些数据写入交换空间。可以通过修改 swappiness 的值来调整系统的交换行为,从而影响 buff/cache 内存占用。 例如,将 swappiness 的值设置为较低的 10,则系统会更倾向于保留内存中的缓存数据,从而减少交换行为,降低 buff/cache 内存占用。 3. 增加物理内存 如果系统中物理内存不足,buff/cache 内存占用就会相对较。可以通过增加物理内存来减少 buff/cache 内存占用,从而提系统的性能。 需要注意的是,增加物理内存并不是万能的解决办法,可能存在其他因素导致的 buff/cache 内存占用问题。在调整系统参数增加物理内存之前,需要仔细分析系统的性能瓶颈内存使用情况,找出问题的根本原因。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值