我想强制Linux内核在缓存开始占用太多内存后为应用程序分配更多内存(可以通过'free'的输出看到)。
我跑了
sudo sync; sudo sysctl -w vm.drop_caches=3; free
(释放光盘dentry / inode缓存和页面缓存)我发现只有大约一半的已用缓存被释放 - 其余的仍然存在。如何判断占用缓存的其余部分并强制将其释放?
答案 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