如何把Linux保持高速caching?

我们正在Debian上运行一个沉重的服务。 我们的服务生成大量的文件I / O,其性能取决于Linux内核caching文件的性能。

我们的系统有64GB内存。 总文件大小为500GB(大量小文件)。 这些文件在raid上通过reiserfs提供。 内核现在是3.2.9。 (这不是一个新问题,我们有这个问题好几年了。)

通常,大部分文件内容都被caching,系统运行平稳。 免费(1)命令显示14G内存caching,10G内存caching和8G内存是免费的。

然而,在我们的繁忙时间,我发现linux内核释放了大部分caching/缓冲区,并保持它们处于空闲状态。 在我看来,保持记忆处于自由状态是一个巨大的浪费,我想这是我们的服务在繁忙时间超载的原因。 免费(1)命令显示像2Gcaching,2G缓冲区和28G免费。

我的问题是,在什么情况下Linux内核想释放内存而不是caching/缓冲。 而如何避免这种行为? 有没有我们可以调整的configuration?

(让我知道如果你需要更多关于我们的硬件/系统/服务的信息)

有两个关键的原因会发生。

其一,我希望你可以排除,是一些人或脚本指挥它这样做。 例如,有人向/sys/vm/drop_caches发送命令。

另一个是如果内存是为了某种其他目的而需要的。 如果一个应用程序需要大量的内存,那么内核会给应用程序提供内存,从而根据需要减lesscaching。 当应用程序与该内存完成时,它将变成免费的。 它只会随着时间的推移填满caching的数据。

如果是这样的话,你可以做几件事情。 例如,如果因为尝试一次处理四个请求而发生内存使用情况,那么您可能希望重新configuration以最大限度地同时执行两个请求。 如果这样可以让更多的数据保存在caching中,这可能是一个整体性能上的胜利。

是否有可能把任何东西放入虚拟磁盘? 显式高速caching,如果你愿意。 不知道你在做什么适合这个,你可能已经想过了,但我会把它扔出去;)

看看这里: http : //www.linuxinsight.com/proc_sys_vm_hierarchy.html

有几点你可以轻松地调整,只是通过“猫”的值。vfs_cache_pressure&zone_reclaim_mode跳出,警告:只有一个我曾经调整过的是swappiness。