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

Gus*_*uss 28 linux kernel memory-management linux-kernel

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

我跑了

sudo sync; sudo sysctl -w vm.drop_caches=3; free
Run Code Online (Sandbox Code Playgroud)

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

Tim*_*ost 17

您可能希望增加vfs_cache_pressure以及设置swappiness0.

这样做会使内核更快地回收缓存,同时在决定被调出的内容时给予进程相同或更多的优势.

你可能只是想这样做,如果你在乎过程做很少的磁盘I/O.

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

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

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


hil*_*llu 16

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

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

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


Ste*_*nne 15

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

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

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

  • 1清除页面缓存,2清除dentries和inode,3清除页面缓存,dentries和inode (2认同)