如何禁用预取缓存?

我运行了几台Ubuntu服务器,上面运行着许多Django网站。这些网站和httpd在启动时自动运行,之后(除非我通过SSH进行更新或使用bzr更新网站),不会再有其他操作。
目前,超过一半的内存被分配为缓存。这并不是个问题,因为缓存通常会释放空间,或者一小部分会进入交换空间(这对我来说并不重要),但我觉得没有必要这样做。
有没有快速禁用缓存的方法?这只是一个实验,所以知道如何重新启用它会很方便。

我不认为你能够禁用它,但是你可以通过执行sync && echo 1 > /proc/sys/vm/drop_caches来清除它。 - karthick87
那样做可以冲掉它,但它会再次充满。 - Oli
3个回答

这篇博客文章由Andrea Righi提出,他认为内核中没有配置选项,但他还勾勒了一个小的glibc包装库,可以在每次调用open()时设置O_DIRECT标志。

这应该与完全禁用读取缓冲区具有相同的效果。

此外,OpenOffice维基上有几种方法进行冷启动测试。虽然这不是你想要的,但我还是觉得值得一提。


自2.6.16版本以后,您可以运行:

sync ; echo 3 | sudo tee /proc/sys/vm/drop_caches

不需要,而且你也不想要。缓存只使用那些本来会闲置的内存。一旦它被需要,就会被释放并分配给需要它的进程,所以你可以认为缓存内存是自由的,这就是为什么free命令会打印出包括缓存在内的一行信息。

最坏的情况下,你可能需要修改内核(也许只是它的配置)。但肯定有可能的,即使困难一些。 - Stefano Palazzo
2你不想要,但我想要。我已经仔细阅读了你在原始帖子中提到的所有内容,但我仍然想要。 - Oli
有一个旋钮可以调节,增加RAM的数量,它会尽量保持在空闲列而不是缓存列中。但除非对内核进行彻底重写,否则无法完全禁用缓存。 - psusi
如果你还想继续,那就说明你没有理解我说的话。缓存内存可以被视为几乎是免费的。它并不会以其他东西为代价而被使用掉。有问题的是你的思维方式,而不是缓存本身。 - psusi
那个旋钮在哪里?我觉得设置说明会完美地回答这个问题(只需将其完全转到十一,就不应该再有任何缓存)。 - Stefano Palazzo
1所有关于“你不想要”的回答都是完全不真实的。我的系统用文件系统缓存填充了RAM,并开始使用交换分区来运行程序,这简直荒谬。它没有按需从磁盘读取这些文件,而是毫无意义地将它们保留在RAM中,并将程序内存操作交换到磁盘上。简直低效得令人发指。 - Andrew Ensley
@Andrew,不正确:只有一段时间没有使用的程序才会被发送到交换空间,因为最好将正在使用的文件缓存起来,而不是那些你没有在使用的程序。很多比你聪明得多的人花了很多时间来思考这些问题。 - psusi