linux内存缓存占用过高分析和优化

打印 上一主题 下一主题

主题 846|帖子 846|积分 2538

1、什么是buffer/cache ?
buffer/cache其实是作为服务器系统的文件数据缓存使用的,尤其是针对进程对文件存在read/write操纵的时间,以是当你的服务进程在对文件举行读写的时间,Linux内核为了提高服务的读写速度,则将会把文件放在此处的buffer/cache中举行缓存使用,由于Linux服务的特点便是任何事物都会以文件的形式举行存在,以是你会发现不管你是否对文件做了大规模的读写,呆板的buffer/cache是一直都存在的,而且连续的增高不下,这是由于服务器所产生的网络连接也好,用户协议的(UDP)套接字也好,这部分的数据系统都会为应用步伐创建对应的文件描述符,而这些文件描述符的使用,则又都会重新进入buffer/cache中做读写使用,以是这也是你的呆板始终都会存在较高buffer/cache的原因,由于所有的文件读写都会用到buffer/cache,在内存公道的情况下。
2、必要注意的一些特点
在服务内存够用的情况下,Linux内核为了加速对文件的读写效率会将文件放入buffer/cache中以保证读写效率,但其实,尽管当你的应用步伐对文件的读写运行竣事后,buffer/cache也不会自动开释该部分内存,而是作为缓冲举行保留,等到你的服务进程在下一次举行雷同文件的读写时就可以直接使用,省去了各种重新举行内存初始化的操纵;以是这将会导致,当你的应用进程频繁对不同的文件举行读写时,你会发现服务所可以直接使用的free内存将会越来越少的一个重要原因;难道buffer/cache在如许无休止的缓存当中就不会自动开释?固然不是,当服务器在内存压力较大的情况下时,则将会自动举行内存的回收,作为free空间分给其它进程使用,这其中重要回收的一个内存则是buffer/cache的缓冲区内存块。
3、怎样举行手动 buffer/cache 回收?
除了在系统进程内存使用较大压力的情况下举行内存的回收外,我们也可以举行手动的buffer/cache回收,但由于buffer/cache重要是用于文件的读写使用,以是举行文件回收时,一样平常常伴随系统的IO彪高,由于系统内核也对比cache中的数据与硬盘中的数据是否同等,如果不同等必要写回硬盘,然后才华举行内存的回收。
3.1将内存中数据逼迫先刷新到磁盘中
sync;
3.2清理Buffer缓存地区
echo 3 > /proc/sys/vm/drop_caches 表示清除pagecache和slab分配器中的缓存对象
echo 1 > /proc/sys/vm/drop_caches:表示清除pagecache。
echo 2 > /proc/sys/vm/drop_caches:表示清除回收slab分配器中的对象(包括目录项缓存和inode缓存)
注:slab分配器是内核中管理内存的一种机制,其中很多缓存数据实现都是用的pagecache。
4、监控报警可用内存空间不足常规的办理方案如下:
增加内存(增加本钱)
增加虚拟内存(影响性能)
定期清理缓存(echo 1 > /proc/sys/vm/drop_caches)
5、问题分析
5.1 监控系统负载情况
通过监控系统负载情况(vmstat 1),确定是页面缓存(cache项)占用量大,而且开释页面缓存后,从块装备读入数据量(bi项)会立刻增加,如果bi或bo长期不等于0,表示内存不足。

5.2监控io情况
通过监控io情况(iostat -x -k 1)也可以看出

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

生产情况遇到服务buffer/cache 过高怎样排查是由那几个进程引起的(hcache 的使用方式)
6、使有hcache缓存文件
全局显示10个最大的被缓存文件
[root@java ~]# hcache -top 10

注:查看指定进程ID所使用的buffer/cache的使用情况:hcache -pid 16322

7、使用losf查看当前所开启该文件的所有进程
通过上述所获取到的被缓存最大的文件名称后,可以直接通过 lsof file_name 得到当前所开启该文件的所有进程信息;
7.1显示使用 kbase-psrt.jar 的进程信息

7.2 获取当进步程号所打开的所有文件信息

更多关于lsof的使用,可以参考如下链接:https://www.cnblogs.com/sparkbj/p/7161669.html
8、内存详细信息
存放内存详细信息文件:/proc/meminfo
查看更详细的内存信息:
cat /proc/meminfo|grep -E "Buffer|Cache|Swap|Mem|Shmem|Slab|SReclaimable|SUnreclaim"



  • MemFree:空闲的物理内存
  • MemAvailable:可用的物理内存,MemFree+Buffers+Cached
  • Buffers:(Buffer Cache)对磁盘块装备数据的缓存
  • Cached:(Page Cache)对文件系统上文件数据的缓存,MemFree+SReclaimable
  • SwapTotal:虚拟内存,利用磁盘空间虚拟出的一块逻辑内存
  • Shmem:进程间共同使用的共享内存
  • Slab:Linux内存管理机制
  • SReclaimable:Slab可回收部分
  • SUnreclaim:Slab不可回收部分
9、清除缓存策略:
定期清理缓存:echo 1 > /proc/sys/vm/drop_caches


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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

傲渊山岳

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表