我希望能够在缓存占用太多内存时(可以通过 'free' 命令的输出看到),强制 Linux 内核为应用程序分配更多的内存。
我已经运行了
sudo sync; sudo sysctl -w vm.drop_caches=3; free
(为了释放磁盘dentry/ inode缓存和页面缓存)我发现只有使用的缓存的一半被释放了-剩下的仍然存在。怎样才能知道是什么占用了剩余的缓存并强制将其释放?
我希望能够在缓存占用太多内存时(可以通过 'free' 命令的输出看到),强制 Linux 内核为应用程序分配更多的内存。
我已经运行了
sudo sync; sudo sysctl -w vm.drop_caches=3; free
(为了释放磁盘dentry/ inode缓存和页面缓存)我发现只有使用的缓存的一半被释放了-剩下的仍然存在。怎样才能知道是什么占用了剩余的缓存并强制将其释放?
您可能需要增加vfs_cache_pressure
并将swappiness
设置为0
。
这样做将使内核更快地回收缓存,同时在决定哪些内容被页面交换出去时,给予进程平等或更多的优先权。
只有当您关心的进程几乎没有磁盘I/O时,您才会想要这样做。
如果网络I/O受限的进程必须进行页面交换以提供服务请求,则存在问题,真正的解决方案是将其放在竞争力较少的服务器上。
在默认的swappiness
设置下,内核几乎总是倾向于在实际内存中保留与文件系统相关的缓存。
因此,如果您增加了缓存压力,请确保同样调整swappiness
。
/proc/meminfo 的内容告诉您内核如何使用 RAM。
您可以使用 /proc/sys/vm/vfs_cache_pressure 来强制内核更懒惰或更积极地回收用于文件系统相关缓存的内存。
请注意,如果您的应用程序几乎不进行磁盘 I/O,则调整此参数可能不会对其产生影响。
sync && echo 1 > /proc/sys/vm/drop_caches
虽然我猜想唯一的区别是1和3之间的不同。