为什么要在 Linux 中删除缓存?

为什么要在 Linux 中删除缓存?

在我们的服务器中,我们有在午夜删除缓存的习惯。

sync; echo 3 > /proc/sys/vm/drop_caches

当我运行代码时,它似乎释放了大量的 RAM,但我真的需要这样做吗?释放的 RAM 难道不是浪费吗?

答案1

你完全正确。不是释放 RAM 是一种很好的做法。这可能是货物崇拜系统管理的一个例子。

答案2

是的,清除缓存将释放 RAM,但它会导致内核在磁盘上而不是在缓存中查找文件,这可能会导致性能问题。

通常,当可用 RAM 耗尽时,内核会清除缓存。它经常使用 pdflush 将脏内容写入磁盘。

答案3

删除缓存的原因是为了对磁盘性能进行基准测试,这也是它存在的唯一原因。

当运行 I/O 密集型基准测试时,您要确保尝试的各种设置实际上都在执行磁盘 I/O,因此 Linux 允许您删除缓存而不是完全重启。

引用文档

该文件不是控制各种内核缓存(inodes、dentry、pagecache 等)增长的手段。当系统的其他地方需要内存时,这些对象会被内核自动回收。

使用此文件可能会导致性能问题。由于它会丢弃缓存的对象,因此可能需要大量 I/O 和 CPU 来重新创建丢弃的对象,尤其是在这些对象使用率很高的情况下。因此,不建议在测试或调试环境之外使用。

答案4

我发现在启动大量虚拟机时,drop cache 非常有用。或者在任何其他使用大页面的服务器上,例如某些数据库服务器。

Linux 中的大页面通常需要对 RAM 进行碎片整理,以便找到 2MB 连续的物理 RAM 来放入页面。释放所有文件缓存使这个过程变得非常容易。

但是我同意大多数其他答案的观点,即没有理由每晚删除文件缓存。

相关内容