使用top命令看下内存情况
本来内存就32G,可以看到buff/cache就占了12G
buff/cache:
Linux具有先进的缓存机制,会针对会针对dentry(用于VFS,加速文件路径名到inode的转换)、Buffer Cache(针对磁盘块的读 写)和Page Cache(针对文件inode的读写)进行缓存操作用来提高读写效率。但是在进行了大量文件操作之后,缓存会把内存资源 基本用光,虽然文件 读取效率提高了,但是物理内存会逐渐被吃光。
然来是因为服务进行了频繁的文件读写操作,但是为什么操作系统不会主动回收呢,原来是因为drop_caches的默认参数设置的就是不释放的
drop_caches的值可以是0-3之间的数字,代表不同的含义:
0:不释放(系统默认值)
1:释放页缓存
2:释放dentries和inodes
3:释放所有缓存
第一种方式:缓存立马释放
cd /proc/sys/vm
echo 1 > drop_caches
释放之后需要重新设置为0,不然没有使用到缓存,数据一直都在IO,导致处理慢,设置的方法是重启服务,会自动设置成默认0
第二种方式:重启ECS服务,会自动释放缓存
内存高原因分析
上面图中可以看到某个java程序出现内存占了整个内存的32%(相当于占用了10个G内存),出现这种情况我们一定要引起重视。