Linux 清理占用RAM的Cache、Buffer和Swap

这篇博客探讨了Linux内存管理,特别是如何清理PageCache、dentries和inode。通过`echo`命令和`sync`操作,用户可以安全地释放内存缓存。然而,定时清理缓存可能影响用户体验和服务器性能,因此需要谨慎。同时,文章还介绍了如何清理Swap空间,建议理解其影响后再执行。

(灯泡亮)由于内存的高价格,各类操作系统都需要高效的管理内存的使用,GUN/Linux内存管理也有一套内存管理分配的策略。

如果某个进程占用了过多的内存,而你想要清理这部分内存,Linux提供了相应的命令来清理ram cache的使用

如何清除 Linux 中的缓存?

  • 只清理PageCache(页缓存)
# sync; echo 1 > /proc/sys/vm/drop_caches 
  • 只清理dentries和inode
sync; echo 2 > /proc/sys/vm/drop_caches
  • 全部清理PageCache、dentries和inode
sync; echo 3 > /proc/sys/vm/drop_caches

解释一下上面运行的命令

(灯泡亮)sync将会刷新系统的buffer,命令分隔符号 ";" 进行命令的分隔,shell将会等待上一个命令执行完成后再执行下一个命令。

(灯泡亮)drop_caches文件的编辑将会在不杀掉进程的情况下清理缓存。就像在内核文档中提到的那样。

(灯泡亮)echo命令进行drop_cache文件的写入

 

如果只是清理disk cache,echo 1是最安全的,次命令只会清理page cache

生产不建议使用echo 3,除非你清楚的明白你在做什么,echo 3将会清理PageCache、dentries和inode

 

Linux的设计理念是,读请求访问disk之前先访问disk cache,如果在disk cache中找到要读取的内容,

这个读请求就不会再去请求读disk,如果我们将disk cache清理掉,所有的读请求都将从磁盘读取

数据,然后再缓存至disk cache。因为清理后的第一次请求在disk cache中找不到。另外disk cache

的清理将会导致系统变慢几秒钟,因为所有的请求第一次都会请求到disk(警告)

 

定时清理

我们可以写个shell脚本,通过crontab每天凌晨两点清理cache。

脚本

创建文件clearcache.sh,脚本内容如下

#!/bin/bash
# Note, we are using "echo 3", but it is not recommended in production instead use "echo 1"
echo "echo 3 > /proc/sys/vm/drop_caches"

授权

# chmod 755 clearcache.sh

定时执行

设置crontab定时2点执行

# crontab -e

添加内容到crontab -e所出现的文本中

0  2  *  *  *  /path/to/clearcache.sh

crontab的详细使用请参照11 Cron Scheduling Jobs.

 

是否应该定时清理cache呢?(警告)

定时清理cache并不是好想法,可能某一天由于未知原因,凌晨两点清理cache后,

用户请求你的网页静态资源等从磁盘加载,导致用户体验很差

 

如果在清理cache的过后,大量的用户从磁盘读取数据,还会导致服务器压力过大,导致软件crash

redis 和mongodb memcache等占用缓存的服务器,千万不要做cache清理

 

如何清理Linux 中的Swap?

如果你想要清理swap空间,可以运行以下命令

# swapoff -a && swapon -a

当你完全理解上面命令的意思之后,你可以将以上脚本加入你的crontab任务中,进行定期清理

 

我们可以将清理swap和清理buffer/cache的脚本融合在一起,写成脚本,用于定时清理或者方便清理操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值