0

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

话虽如此,我想如果到了那一步,读/写可能会失败,对吧?

4

2 回答 2

3

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

于 2011-03-17T09:46:03.487 回答
1

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

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

于 2012-01-12T16:12:36.603 回答