如何清理Linux内核使用的缓存

时间:2009-03-01 12:01:54

标签: linux linux-kernel kernel memory-management

我想强制Linux内核在缓存开始占用太多内存后为应用程序分配更多内存(可以通过'free'的输出看到)。

我跑了

sudo sync; sudo sysctl -w vm.drop_caches=3; free

(释放光盘dentry / inode缓存和页面缓存)我发现只有大约一半的已用缓存被释放 - 其余的仍然存在。如何判断占用缓存的其余部分并强制将其释放?

3 个答案:

答案 0 :(得分:17)

您可能希望增加vfs_cache_pressure以及将swappiness设置为0

这样做会使内核更快地回收缓存,同时在决定分页的时候给予进程相同或更多的优势。

如果您关心的进程执行非常少的磁盘I / O,您可能想要这样做。

如果网络I / O绑定进程必须交换来处理请求,那就是一个问题,真正的解决方案是将它放在竞争力较弱的服务器上。

使用默认的swappiness设置,内核几乎总是倾向于将FS相关的缓存保留在实际内存中。

因此,如果您增加缓存压力,请务必同等地调整swappiness

答案 1 :(得分:16)

/ proc / meminfo 的内容告诉您内核使用RAM的目的。

您可以使用 / proc / sys / vm / vfs_cache_pressure 强制内核更懒惰或急切地回收用于与文件系统相关的缓存的内存。

请注意,如果您的应用程序只执行很少或没有磁盘I / O,那么它可能只会受益于调整此参数。

答案 2 :(得分:15)

您可能会发现John Nilsson's answer to my Question对于清除缓存非常有用,可以测试它是否与您的问题相关:

  

sync && echo 1 > /proc/sys/vm/drop_caches

虽然我猜测唯一真正的区别是1 vs 3