本文主要是介绍Linux buff/cache过高吃掉物理内存,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
今日发现线上一微服务无法启动,查看了一下物理内存,居然只剩下了1G,然来居然是buff/cache一列占用过高:
那么 buff/cache主要是来干嘛的呢?
Linux具有先进的缓存机制,会针对会针对dentry(用于VFS,加速文件路径名到inode的转换)、Buffer Cache(针对磁盘块的读 写)和Page Cache(针对文件inode的读写)进行缓存操作用来提高读写效率。但是在进行了大量文件操作之后,缓存会把内存资源 基本用光,虽然文件 读取效率提高了,但是物理内存会逐渐被吃光。
然来是因为服务进行了频繁的文件读写操作,但是为什么操作系统不会主动回收呢,原来是因为drop_caches的默认参数设置的就是不释放的
drop_caches的值可以是0-3之间的数字,代表不同的含义:
0:不释放(系统默认值)
1:释放页缓存
2:释放dentries和inodes
3:释放所有缓存
进行如下修改,然后 free -g 发现缓存立即被释放
echo 1 > /proc/sys/vm/drop_caches
这篇关于Linux buff/cache过高吃掉物理内存的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!