有勇气的牛排博客

Linux 系统层面定期释放、内存释放

有勇气的牛排 41 linux 2025-04-19 20:55:53

1 前言

1.1 摘要

Linux 系统层面定期释放,通常是指 内存(Memory) 的定期释放,尤其是 缓存(cache)、缓冲区(buffers)和页缓存(page cache)。这类释放行为,有助于系统在长期运行时保持良好的内存使用状态,避免内存占用持续升高。

1.2 为什么要定期释放内存缓存?

Linux 系统为了加快文件系统的访问速度,会使用 页缓存(page cache) 来缓存磁盘数据。虽然这些缓存能被自动管理,但在某些场景(如服务器内存较小、大量 I/O 操作等)下,可能希望手动定期释放以释放更多内存供其他应用使用。

2 手动释放内存缓存的方法

Linux 提供了接口可以让我们控制缓存释放

# 查看内存占用情况 free -h

CentOS查看内存占用情况

注:top命令可以查询具体占用情况

2.1 临时释放内存缓存

# 清除页缓存 echo 1 > /proc/sys/vm/drop_caches # 清除目录项和 inode 缓存 echo 2 > /proc/sys/vm/drop_caches # 清除页缓存、目录项和 inode 缓存(最彻底) echo 3 > /proc/sys/vm/drop_caches

⚠️ 注意:以上操作不会影响正在运行的程序,但会导致磁盘 I/O 变慢(因为缓存被清掉了)。

3 定期释放(定时任务方式)

3.1 编写脚本

可以通过 cron 定期执行释放操作

mkdir -p /home/cs/corn vim /home/cs/corn/clear_cache.sh
#!/bin/bash sync echo 3 > /proc/sys/vm/drop_caches

sync 的作用是将缓存数据写入磁盘,避免数据丢失。

3.2 赋予执行权限

chmod +x /home/cs/corn/clear_cache.sh

3.3 设置定时任务

每天凌晨 2 点释放一次

crontab -e
0 2 * * * /home/cs/corn/clear_cache.sh >> /home/cs/corn/clear_cache.log 2>&1

4 内核参数优化相关

也可以通过调整内核参数优化内存回收行为

vim /etc/sysctl.conf
# 控制系统多久触发回写 dirty 页缓存(秒) vm.dirty_expire_centisecs = 3000 # 当系统脏页比例超过这个值时触发回写 vm.dirty_ratio = 20 # 超过多少脏页比例时开始后台回写 vm.dirty_background_ratio = 10 # 内核回收内存的倾向(越大越积极) vm.swappiness = 10

加载配置

sysctl -p

5 是否推荐频繁手动释放缓存?❗

一般不推荐频繁释放,除非系统资源紧张,或特定应用场景(如批处理服务器、视频转码服务器等)。

Linux 本身的内存管理已经很智能,缓存不等于占用,它会在需要时自动释放。手动释放可能会带来性能损耗。


留言

专栏
文章
加入群聊