我想在缓存开始占用过多内存后强制 Linux 内核为应用程序分配更多内存(从“free”的输出可以看出)。
我跑了
sudo sync; sudo sysctl -w vm.drop_caches=3; free
(释放磁盘目录/索引节点缓存和页面缓存),我看到只有大约一半的已用缓存被释放 - 其余的仍然存在。我怎样才能知道是什么占用了缓存的其余部分并强制释放它?
我想在缓存开始占用过多内存后强制 Linux 内核为应用程序分配更多内存(从“free”的输出可以看出)。
我跑了
sudo sync; sudo sysctl -w vm.drop_caches=3; free
(释放磁盘目录/索引节点缓存和页面缓存),我看到只有大约一半的已用缓存被释放 - 其余的仍然存在。我怎样才能知道是什么占用了缓存的其余部分并强制释放它?
您可能想要增加vfs_cache_pressure
并设置swappiness
为0
。
这样做将使内核更快地回收缓存,同时在决定要分页的内容时给予进程同等或更多的支持。
如果您关心的进程很少进行磁盘 I/O,您可能只想这样做。
如果一个受网络 I/O 限制的进程必须交换来服务请求,那就是个问题,真正的解决方案是把它放在竞争不那么激烈的服务器上。
在默认swappiness
设置下,内核几乎总是倾向于将与 FS 相关的缓存保留在实际内存中。
As such, if you increase the cache pressure, be sure to equally adjust swappiness
.
/proc/meminfo的内容告诉你内核使用 RAM 的目的。
您可以使用/proc/sys/vm/vfs_cache_pressure来强制内核更懒惰或急切地回收用于文件系统相关缓存的内存。
请注意,您的应用程序只有在很少或没有磁盘 I/O 的情况下才能从调整此参数中受益。
您可能会发现John Nilsson 对我的问题的回答对清除缓存很有用,以便测试这是否与您的问题有关:
sync && echo 1 > /proc/sys/vm/drop_caches
虽然我猜唯一真正的区别是 1 对 3