28

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

我跑了

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

(释放磁盘目录/索引节点缓存和页面缓存),我看到只有大约一半的已用缓存被释放 - 其余的仍然存在。我怎样才能知道是什么占用了缓存的其余部分并强制释放它?

4

3 回答 3

18

您可能想要增加vfs_cache_pressure并设置swappiness0

这样做将使内核更快地回收缓存,同时在决定要分页的内容时给予进程同等或更多的支持。

如果您关心的进程很少进行磁盘 I/O,您可能只想这样做。

如果一个受网络 I/O 限制的进程必须交换来服务请求,那就是个问题,真正的解决方案是把它放在竞争不那么激烈的服务器上。

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

As such, if you increase the cache pressure, be sure to equally adjust swappiness.

于 2009-03-28T02:17:25.637 回答
17

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

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

请注意,您的应用程序只有在很少或没有磁盘 I/O 的情况下才能从调整此参数中受益。

于 2009-03-01T12:44:18.710 回答
15

您可能会发现John Nilsson 对我的问题的回答对清除缓存很有用,以便测试这是否与您的问题有关:

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

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

于 2009-03-25T10:00:38.387 回答