Linux下手动清理内存和Cache方法 /proc/sys/vm/drop_caches

本文介绍了在Linux系统中如何手动清理内存和Cache,包括sync命令的使用以及通过修改/proc/sys/vm/drop_caches文件来释放不同类型的缓存。通过调整系统参数,可以避免内存持续增加,保持系统性能。

Linux下手动清理内存和Cache方法 /proc/sys/vm/drop_caches

使用原理

在linux系统中,为了加快数据的读取速度,默认情况下,某些数据将不会直接写入硬盘,而是先暂存内存中,如果一个数据被重复写,这样速度一定快,但存在一个问题,万一重新启动,或者是关机,或者是不正常断电的情况下,由于数据还没来得及存入硬盘,会造成数据更新不正常,这时需要命令sync进行数据的写入,即#sync,在内存中尚未更新的的数据会写入硬盘中。当然正常情况下,关闭系统时会自动进行内存数据于硬盘数据的同步检测,保证硬盘数据在关闭系统时是最新的。

使用方法:

频繁的文件访问会导致系统的Cache使用量大增

$ free -g

运行sync将dirty的内容写回硬盘
$sync

通过修改proc系统的drop_caches清理free的cache
$echo 3 > /proc/sys/vm/drop_caches

drop_caches的详细文档如下:
Writing to this will cause the kernel to drop clean caches, dentries and inodes from memory, causing that memory to become free.
To free pagecache:
* echo 1 > /proc/sys/vm/drop_caches
To free dentries and inodes:
* echo 2 > /proc/sys/vm/drop_caches
To free pagecache, dentries and inodes:
* echo 3 > /proc/sys/vm/drop_caches
As this is a non-destructive operation, and dirty objects are notfreeable, the user should run "sync" first in order to make sure allcached objects are freed.
This tunable was added in 2.6.16.

修改/etc/sysctl.conf 添加如下选项后就不会内存持续增加
vm.dirty_ratio = 1
vm.dirty_background_ratio=1
vm.dirty_writeback_centisecs=2
vm.dirty_expire_centisecs=3
vm.drop_caches=3
vm.swappiness =100
vm.vfs_cache_pressure=163
vm.overcommit_memory=2
vm.lowmem_reserve_ratio=32 32 8
kern.maxvnodes=3

上面的设置比较粗暴,使cache的作用基本无法发挥。需要根据机器的状况进行适当的调节寻找最佳的折衷。

<think>我们正在讨论如何清理Linux系统中的drop_caches。用户已经提供了两个引用,其中引用[1]说明了/proc/sys/vm/drop_caches的用途,即允许请求内核立即丢弃尽可能多的干净缓存数据。引用[2]则详细介绍了如何操作该文件来释放不同类型的缓存(页面缓存、目录项缓存inode缓存),并给出了具体的命令注意事项。用户的上一个问题询问了bufferscached的区别,现在用户的新问题是关于如何清理drop_caches。因此,我们需要根据用户提供的引用之前的知识,提供操作步骤注意事项。操作步骤:1.释放页面缓存(PageCache):```bashecho1|sudotee/proc/sys/vm/drop_caches```2.释放目录项inode缓存(DentryandInodeCaches):```bashecho2|sudotee/proc/sys/vm/drop_caches```3.释放所有缓存(页面缓存、目录项缓存inode缓存):```bashecho3|sudotee/proc/sys/vm/drop_caches```注意事项:-需要root权限(使用sudo)。-该操作只会清理“干净”的缓存(即未被修改的数据),而“脏”缓存(已被修改但未写入磁盘的数据)不会被丢弃。-清理缓存后,系统在重新访问文件时需要重新加载数据,可能导致短期性能下降。-此操作是临时的,系统会随着运行自动重建缓存。-通常仅用于测试或特殊调优场景,不建议在生产环境中频繁使用。此外,用户可能还想知道如何查看缓存使用情况,可以使用:```bashfree-h```或者```bashcat/proc/meminfo|grep-icache```最后,按照要求生成相关问题。</think>### 如何在Linux清理`drop_caches`及操作`/proc/sys/vm/drop_caches` 在Linux系统中,`/proc/sys/vm/drop_caches`是内核提供的虚拟文件,用于**手动释放内存中的干净缓存**(clean cache)。以下是具体操作方法注意事项: --- #### 🔧 清理缓存的操作步骤(需root权限) ```bash # 1. 释放页面缓存(Page Cache) echo 1 | sudo tee /proc/sys/vm/drop_caches # 2. 释放目录项缓存(Dentry Cache) echo 2 | sudo tee /proc/sys/vm/drop_caches # 3. 释放inode缓存(Inode Cache) echo 3 | sudo tee /proc/sys/vm/drop_caches # 4. 释放所有缓存(Page+Dentry+Inode) echo 3 | sudo tee /proc/sys/vm/drop_caches # 最常用方式 ``` --- #### ⚠️ 关键注意事项 1. **仅释放"干净"缓存** - 操作**不会释放脏缓存**(dirty cache),脏数据需先写入磁盘才能释放[^1]。 - 可通过`sync`命令强制写入脏数据: ```bash sync # 先将脏数据写入磁盘 echo 3 | sudo tee /proc/sys/vm/drop_caches ``` 2. **性能影响** - 清理后首次访问文件需从磁盘加载,可能导致**短期性能下降**。 - 生产环境慎用,建议仅在**测试或紧急内存回收**时操作。 3. **临时性操作** - 效果是临时的,内核会根据需要自动重建缓存。 - 重启后缓存机制恢复正常。 --- #### 🔍 操作前后缓存监控 ```bash # 查看缓存使用情况(操作前) free -h cat /proc/meminfo | grep -E 'Cached|Buffers' # 操作后再次检查对比 echo 3 | sudo tee /proc/sys/vm/drop_caches free -h # 观察buff/cache列变化 ``` > 💡 **示例输出**: > ``` > total used free shared buff/cache available > Mem: 16G 5.2G 2.1G 1.3G 8.7G 9.5G > ``` > 执行`echo 3`后`buff/cache`值显著下降。 --- #### 🛡️ 安全建议 1. **避免脚本化清理** 内核自动管理缓存效率更高,频繁手动清理可能降低系统性能。 2. **测试场景专用** 常用于: - 评估应用在无缓存时的性能 - 内存泄漏测试 - 文件系统一致性检查 3. **替代方案** 内存不足时优先调整内核参数: ```bash # 调整脏页写回阈值 sysctl -w vm.dirty_ratio=10 sysctl -w vm.dirty_background_ratio=5 ``` > 📌 **总结**:`/proc/sys/vm/drop_caches`是内核暴露的手动缓存管理接口,需理解其**临时性、选择性释放**的特性,避免在生产环境滥用[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值