Linux buff/cache 释放过高内存解决方案

今日发现web服务器无法启动,查看了一下物理内存,居然只剩下了144M ,然来居然是buff/cache一列占用过高,Linux buff/cache过高吃掉物理内存如何解决呢?

查看命名如下:

free -h

内存使用情况如下:

         total        used        free      shared  buff/cache   available
Mem:     7.4G        1.4G        144M     540K    5.9G            5.8G
Swap:    0B          0B          0B

那么 buff/cache主要是来干嘛的呢?

Linux具有先进的缓存机制,会针对会针对dentry(用于VFS,加速文件路径名到inode的转换)、Buffer Cache(针对磁盘块的读写)和Page Cache(针对文件inode的读写)进行缓存操作用来提高读写效率。

但是在进行了大量文件操作之后,缓存会把内存资源基本用光,虽然文件读取效率提高了,但是物理内存会逐渐被吃光。

原来是因为服务进行了频繁的文件读写操作,但是为什么操作系统不会主动回收呢,原来是因为drop_caches的默认参数设置的就是不释放的

            drop_caches的值可以是0-3之间的数字,代表不同的含义:
            0:不释放(系统默认值)
            1:释放页缓存
            2:释放dentries和inodes
            3:释放所有缓存

echo 1 > /proc/sys/vm/drop_caches

free -h

echo 2 > /proc/sys/vm/drop_caches

free -h

echo 3 > /proc/sys/vm/drop_caches

free -h

每发一个命令用   free -h 查看一下,buff/cache的内存肯定就释放掉了

同时用 free -g 也可以对缓存起到立即释放的作用。

快快执行以上的命令吧,buff/cache内存马上就能释放掉了。