(Linux)释放系统缓存操作

前言

在Linux系统中有先进的缓存机制,会针对dentry(用于VFS,加速文件路径名到inode的转换)、Buffer Cache(针对磁盘块的读写)和Page Cache(针对文件inode的读写)进行缓存操作,有效缩短 I/O系统调用(比如read,write)的时间。

但是当我们进行了大量文件操作之后,缓存会把内存资源基本用光,导致系统缓慢,使用swap空间,影响了性能,这时就需要清理缓存了。



手动释放缓存操作


/proc是一个虚拟文件系统,我们可以通过修改 /proc中的文件,来对当前kernel的行为做出调整

我们可以通过调整/proc/sys/vm/drop_caches来释放内存


【1】清缓存前同步


释放内存前先使用sync命令做同步,将所有未写的系统缓冲区写到磁盘中,以确保文件系统的完整性,否则在释放缓存的过程中,可能会丢失未保存的文件。


<1>同步
sync


【2】Linux释放内存


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


<1>释放页缓存
echo 1 > /proc/sys/vm/drop_caches

<2>释放完内存后改回去让系统重新自动分配内存
echo 0 >/proc/sys/vm/drop_caches

<3>如果要释放所有缓存
echo 3 > /proc/sys/vm/drop_caches



【3】查看


<1>看内存是否已经释放掉了
free -m


参数介绍:

total 内存总数
used 已使用内存数
free 空闲内存数
shared 多个进程共享的内存数
buffers 缓存(用于目录,inode值)
cached 缓存(用于已打开的文件)



定时清理缓存


【1】脚本

<1>vim /root/cache.sh

#! /bin/bash
#v1.0

sync

#echo 1 > /proc/sys/vm/drop_caches
#echo 2 > /proc/sys/vm/drop_caches

echo 3 > /proc/sys/vm/drop_caches

echo 0 > /proc/sys/vm/drop_caches


【2】赋予权限

<1>chmod +x /root/cache.sh


【3】加入计划任务

<1>每天晚上11点释放缓存
echo “0 23 * * * /root/cache.sh” >> /etc/crondtab

你可能感兴趣的:(运维日常的FAQ)