限制缓冲区缓存

时间:2011-03-16 23:31:32

标签: linux-kernel vfs

我想知道是否有任何方法可以设置缓冲区缓存可用地址空间的上限?我认为没有限制,一旦内存使用量达到某一点,其他进程将被换出以使缓冲区缓存扩展?

话虽如此,我想如果达到这一点,读/写可能只是失败了吗?

2 个答案:

答案 0 :(得分:3)

读写不会因为BufferCache占用大量内存而失败。只有未使用的RAM用作缓存磁盘的缓冲区,但如果某个进程需要内存,则优先级更高。这是由内核自动完成的,缓冲区缓存只是资源的最佳利用,它不会损害系统的正常工作。

答案 1 :(得分:1)

一般问题不是读/写会失败,而是您的应用程序将冻结并最终失败。这是一个非常简单的实验。获取一个非常大的文件目录并将其复制到一个非常慢的设备。您会发现写缓存将消耗100%的可用内存。只有通过实际写入慢速设备才能清除此缓存。问题是当应用程序需要内存或需要交换回已经交换到磁盘的东西时会发生什么?由于缓存是空的太慢,唯一真正的选择是将其他东西交换到磁盘以提供更多可用内存。所以现在整个系统正在颠簸。如果你没有交换空间,那么你就会遇到严重的问题。无论哪种方式,您的桌面都相当笨拙,甚至可能完全锁定,直到您的复制完成。

虽然我不知道要解决此问题,但请将vm.vfs_cache_pressure调整为0并将vm.swappiness调整为0以帮助减少此问题。