答案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_ratio
sysctl 可调参数,它控制在内核执行自己的操作之前内存中保存多少脏数据sync
,您可以尝试降低它,以便在文件系统缓存被标记为“脏”,因此在需要内存时可以被逐出。