记一次解决缓存不释放导致内存耗光问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记一次解决缓存不释放导致内存耗光问题相关的知识,希望对你有一定的参考价值。

1 前言

通过脚本备份数据和系统,笔者遇到两项缓存过高不释放而导致内存使用过高问题,Zabbix截图如下,

技术分享

- 第一次是由每小时往挂载的Window共享里面存放备份文件引起

- 第二次是由每周备份系统过度地频繁读写文件系统引起缓存不释放引起

2 挂载Window共享备份引发的缓存问题

2.1 问题描述

挂载Window的共享成为Linux服务器的备份目录,发现备份后缓存过高,挂载范例如下,

mount -t cifs -o username=user1%pwd1 //backupSer/backup$ /backup/

2.2 排查方法

1)使用free命令可以发现cached占用情况,

free -m

显示如下:

             total       used       free     shared    buffers     cached
Mem:          7872       7732        139          0        190       6312
-/+ buffers/cache:       1229       6642
Swap:         4047          0       4047

注:留意cached项非常高

2)进一步的,使用slabtop可以发现cifs模块占用了大量的缓存(忘记截图保留了……O(∩_∩)O哈哈~,见谅哈!)

slabtop

注:查看SIZE和NAME项

2.3 排查故障

尝试手动卸载发现缓存被释放

umount /backup

2.4 解决方案

改用autofs去按需要自动挂载和卸载(非本文核心内容,这里不详述,自己研究)


3 频繁读写文件系统引发的Cache问题

3.1 问题描述

用tar命令备份系统,由于频繁读写文件系统,物理内存占用不被释放

3.2 排查方法

1)查看缓存占用情况

free -m

显示如下:

             total       used       free     shared    buffers     cached
Mem:          7872       7732        139          0        190       6312
-/+ buffers/cache:       1229       6642
Swap:         4047          0       4047

2)进一步的,使用slabtop没有发现占用了大量缓存的模块

3.3 补充知识

free -m打印的结果,

             total       used       free     shared    buffers     cached
Mem:          7872       7732        139          0        190       6312
-/+ buffers/cache:       1229       6642
Swap:         4047          0       4047

如上所示,

cached项反映的是pagecache的使用情况

buffers项反映的是inode和dentry等文件系统metadata的使用情况


网络上有3种释放方法:

#释放pagecache
echo 1 > /proc/sys/vm/drop_caches  

#释放inode和dentry等metadata  
echo 2 > /proc/sys/vm/drop_caches  

#释放pagecache和inode/dentry
echo 3 > /proc/sys/vm/drop_caches

3.4 解决方案

sync
sync
sync
echo 1 > /proc/sys/vm/drop_caches

注:建议不要释放inode和dentry,笔者在CentOS 6.8中尝试使用过,会导致虚拟机死机(当然,这有可能是个特例)


参考文献:

======================================================

http://blog.csdn.net/fall221/article/details/46290563

http://www.cnblogs.com/panfeng412/p/drop-caches-under-linux-system.html


本文出自 “老谭linux集群博客” 博客,谢绝转载!

以上是关于记一次解决缓存不释放导致内存耗光问题的主要内容,如果未能解决你的问题,请参考以下文章

记一次Android 面试,包含面试题答案

记一次内存溢出查找分析文档

记一次SignalR的部署错误问题

spring boot 做的网站访问隔几秒会慢一次,想不出来是啥问题

记一次线上Redis缓存击穿

记一次Redis的内存碎片比过高的解决