清除 Amazon EC2 上的内存缓存

清除 Amazon EC2 上的内存缓存

在我们的项目中,我们有一些测试,连续运行大约 3-4 小时。在适当的时候,测试会失败,因为他们找不到足够的内存。在谷歌搜索上,我发现运行以下命令可以帮助我恢复测试:

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

然而,这些是每晚的测试,如果我们可以在没有手动干预的情况下运行它,那将对我们有很大帮助。

我只是在寻找完成此任务的选项。

我找到了几个链接12从表面上看,这可能很有用。

我只是想知道我的其他选项,然后才能继续更新 cron 选项卡。

定期清理缓存可以吗?会引起其他问题吗?

增加内存会有帮助吗?我有什么选择?

答案1

增加内存会有帮助吗?

sync如果不知道为什么运行这两个命令(和)后测试会成功,很难说drop_caches。老实说,我不认为删除文件系统缓存能够使您的测试正常工作,除非您的测试由于延迟问题而失败。当内核注意到内存下降到以下时,min_free_kbytes它开始从缓存中逐出最旧的条目,以使实际空闲内存至少恢复到min_free_kbytes.该过程的唯一例外是标记为“脏”的页面。因此,文件系统缓存的存在通常不是问题,除非您的应用程序分配内存的速度快于内核找到要修剪的条目的速度(在这种情况下,增加min_free_kbytes是正常的)。

对您来说最有用的命令可能sync是释放专用于异步磁盘 I/O 的缓冲区的内存(以及dirty从文件系统缓存中的所有条目中删除,使它们成为在内存不足的情况下被逐出的候选者) 。

我认为添加更多 RAM 会有帮助的可能性约为 80-90%,但我不知道你正在运行什么测试,所以我不能肯定地说。

定期清理缓存可以吗?会引起其他问题吗?

您在这里所做的基本上是性能调整(或者至少您正在使用为此目的提供的可调参数)。当知道“正确”答案通常被认为是不可能/不切实际时,通常会提供可调参数。如果可以创建关于事物应该如何运行的一般规则,那么他们只会让软件做那件事,而系统管理员就不会参与其中。

综上所述,我们不能绝对肯定地说它不会给您带来问题。我们可以说大概不会引起功能丧失但我们不能确定。我想说,文件系统缓存旨在提高性能,因此强制应用程序在读取任何内容时都等待来自磁盘的数据可能是不可取的(尽管有时可能不希望但有必要)。

编辑:

只需阅读@Emmanuel 的评论。他提出了一个很好的观点。如果您有未使用的交换空间,您可以尝试增加交换空间vm.swappiness以增加内核对交换出较少使用的应用程序内存的偏好。如果您需要更多交换空间(或没有),您可以在线查找有关创建交换分区和交换文件的说明。

编辑#2

我还没有玩过这个,但是看看内核文档,有一个dirty_ratiosysctl 可调参数,它控制在内核执行自己的操作之前内存中保存多少脏数据sync,您可以尝试降低它,以便在文件系统缓存被标记为“脏”,因此在需要内存时可以被逐出。

相关内容