# Linux下如何清除Cache和Buffer
## 1. 理解Linux内存管理机制
### 1.1 内存组成结构
Linux系统中的内存主要分为以下几个部分:
- **物理内存(Physical Memory)**:实际安装的RAM容量
- **交换空间(Swap Space)**:磁盘上的虚拟内存区域
- **Cache(缓存)**:用于加速文件访问的磁盘缓存
- **Buffer(缓冲)**:用于存储原始磁盘块的临时数据
### 1.2 Cache与Buffer的区别
| 特性 | Cache | Buffer |
|-------------|---------------------------|--------------------------|
| 主要用途 | 加速文件读取 | 缓冲磁盘写入操作 |
| 数据内容 | 文件内容 | 原始磁盘块 |
| 生命周期 | 根据内存压力自动释放 | 通常短暂存在 |
| 管理方式 | 页面缓存(page cache) | 块设备缓冲 |
## 2. 查看系统内存使用情况
### 2.1 使用free命令
```bash
free -h
输出示例:
total used free shared buff/cache available
Mem: 15Gi 4.2Gi 6.7Gi 1.1Gi 4.1Gi 9.5Gi
Swap: 2.0Gi 0.0Gi 2.0Gi
关键指标说明:
- buff/cache
:显示当前Buffer和Cache的总使用量
- available
:估算的可用内存(包含可回收的Cache)
cat /proc/meminfo
重要字段:
- MemTotal
:总内存
- MemFree
:完全空闲的内存
- Buffers
:Buffer占用量
- Cached
:Cache占用量
- SReclaimable
:可回收的Slab内存
在清除前建议先同步数据到磁盘:
sync
# 清除PageCache
echo 1 > /proc/sys/vm/drop_caches
# 清除dentries和inodes
echo 2 > /proc/sys/vm/drop_caches
# 清除PageCache、dentries和inodes
echo 3 > /proc/sys/vm/drop_caches
注意事项: 1. 需要root权限 2. 清除操作不会影响正在使用的内存页 3. 生产环境慎用,可能导致性能波动
sysctl vm.drop_caches=1
#!/bin/bash
# 内存清理脚本
# 定义内存阈值(单位MB)
THRESHOLD=2048
# 获取可用内存
AVLABLE=$(free -m | awk '/Mem:/ {print $7}')
if [ $AVLABLE -lt $THRESHOLD ]; then
echo "$(date) - 可用内存低于阈值,执行清理" >> /var/log/memclean.log
sync
echo 3 > /proc/sys/vm/drop_caches
fi
设置cron定时任务:
0 */4 * * * /path/to/clean_script.sh
创建服务文件/etc/systemd/system/memclean.service
:
[Unit]
Description=Memory Cleaner Service
[Service]
Type=oneshot
ExecStart=/usr/bin/sync
ExecStart=/usr/bin/echo 3 > /proc/sys/vm/drop_caches
创建定时器/etc/systemd/system/memclean.timer
:
[Unit]
Description=Run memory cleaner daily
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target
启用服务:
systemctl enable --now memclean.timer
# 查看当前值(默认60)
cat /proc/sys/vm/swappiness
# 临时修改
sysctl vm.swappiness=10
# 永久修改
echo "vm.swappiness=10" >> /etc/sysctl.conf
示例:限制某进程组的内存使用
# 创建cgroup
cgcreate -g memory:/my_group
# 设置内存限制为1GB
echo 1G > /sys/fs/cgroup/memory/my_group/memory.limit_in_bytes
# 将进程加入cgroup
cgclassify -g memory:my_group <pid>
安装:
apt install earlyoom # Debian/Ubuntu
yum install earlyoom # RHEL/CentOS
配置:
# 编辑/etc/default/earlyoom
EARLYOOM_ARGS="-r 5 -m 5 -n 3"
vmstat 1
或sar -r 1
持续监控vm.overcommit_memory
参数不会。Linux内核只会释放未被使用的缓存页,已映射到进程的缓存页不会被释放。
这是正常现象。Linux会积极利用空闲内存做缓存,这是设计特性而非问题。
建议保持至少5-10%的物理内存作为空闲空间,具体取决于工作负载。
使用vmstat
观察si
(swap in)和so
(swap out)值,持续非零值表示内存压力过大。
htop:交互式进程查看器
apt install htop
vmstat:虚拟内存统计
vmstat 1
smem:高级内存报告
smem -s swap -r
Grafana+Prometheus:可视化监控方案
Linux的内存管理机制经过精心设计,在大多数情况下无需手动干预Cache和Buffer。理解以下关键原则:
通过本文介绍的方法和工具,您可以有效监控和管理Linux系统的内存使用,在必要时安全地清理Cache和Buffer,同时避免对系统性能造成负面影响。
注意:所有生产环境操作前,请确保已进行充分测试并做好备份。 “`
这篇文章共计约2300字,采用Markdown格式编写,包含: 1. 详细的技术说明 2. 实用的命令示例 3. 结构化知识展示 4. 生产环境建议 5. 常见问题解答 6. 可视化元素(表格、代码块等)
可根据需要调整各部分内容深度或添加特定发行版的说明。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。