在使用阿里云k8s集群的过程中,由于应用对于free内存的容量要求较高,设置了阈值较低的mem告警策略
收到告警mem free不足,登录主机top发现16g内存,10g左右均为buff/cache,
通过查找资料,整理出简单的总结:
原因:buff为写文件缓存,cache为读文件缓存,linux在缓存使用后并不会马上释放,而是用来缓存其他信息提高io效率,所以有过大文件读写操作就会造成buff/cache 变高
手动清理cache方法:
#将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-Node、已延迟的块 I/O 和读写映射文件,确保文件系统的完整性
sync
#执行清理内存指令
#0:不释放(系统默认值)
#1:释放页缓存
#2:释放dentries和inodes
#3:释放所有缓存
echo 1 > /proc/sys/vm/drop_caches
echo 2 > /proc/sys/vm/drop_caches
echo 3 > /proc/sys/vm/drop_caches
释放后free -m查看内存占用情况cache明显减少
#恢复内存清理策略为不清理
echo 0 > /proc/sys/vm/drop_caches
在恢复内存清理策略的过程中报错:echo: write error: invalid argument(ubuntu 16.04) ,也不支持vim修改, 尝试重启主机后,drop_caches值自动恢复为0,不过在重启主机的过程中,free发现cache又不断增加,没有解决,
定位占用cache的文件:(使用开源工具pcstat ,centos需要yum install lsof)
安装pcstat:
#安装高版本go(ubuntu16.04 apt-get默认安

最低0.47元/天 解锁文章
5329

被折叠的 条评论
为什么被折叠?



