在我们的项目中,我们有几个测试,持续运行3-4个小时。在适当的时候,测试失败了,因为它们找不到足够的内存。在googling中,我发现运行以下命令可以帮助我恢复测试:
sync; echo 3 > /proc/sys/vm/drop_caches然而,这些都是夜间测试,如果我们能够在不需要人工干预的情况下运行它,这将对我们有很大帮助。
我只是在考虑做这件事的选择。
我找到了一些链接1和2,从它的外观来看可能是有用的。
在继续更新cron选项卡之前,我只想知道我的其他选项。
定期清理缓存可以吗?会不会引起其他问题?
增加内存会有帮助吗?我有什么选择?
发布于 2014-04-28 14:11:22
增加内存会有帮助吗?
很难说,在运行这两个命令(sync和drop_caches)之后,您的测试为什么会成功。我不认为丢弃文件系统缓存可以使您的测试工作,除非您的测试由于延迟问题而失败。当内核注意到min_free_kbytes下面的东西时,它就开始将最古老的条目从缓存中删除,以便将实际空闲的内存返回到至少min_free_kbytes。该过程的唯一例外是标记为“脏”的页面。因此,文件系统缓存的存在通常不是一个问题,除非您的应用程序分配内存的速度快于内核能够找到要修剪的条目(在这种情况下,min_free_kbytes是合适的)。
最适合您的命令可能是sync命令,它可能正在释放专用于用于异步磁盘I/O的缓冲区的内存(以及从文件系统缓存中的所有条目中删除dirty,使它们成为在低内存条件下驱逐的候选对象)。
我认为添加更多的RAM是有帮助的,但我不知道你在运行什么测试,所以我不能肯定。
定期清理缓存可以吗?会不会引起其他问题?
您在这里所做的基本上是性能调优(或者至少您正在使用可调的可调功能)。通常,当知道“正确”的答案一般被认为是不可能的/不切实际的时候,就会提供可调理的内容。如果有可能创建关于事情应该如何运行的一般规则,他们只会让软件做这件事,并将系统管理员排除在外。
我们不能完全肯定地说,这不会给你带来麻烦。我们可以说,它可能不会导致功能的丧失,但我们不能确定。我要说的是,文件系统缓存的设计是为了提高性能,因此,迫使应用程序在读取任何内容时都等待数据从磁盘进入可能是不可取的(虽然有时可能是不可取的,但也是必要的)。
只需阅读@Emmanuel的评论。他提出了一个好的观点。如果您有未使用的交换空间,则可以尝试增加vm.swappiness以增加内核的首选项,以交换较少使用的应用程序内存。如果您需要更多的交换空间(或者没有交换空间),您可以在线找到创建交换分区和交换文件的说明。
我还没有玩过这个游戏,但是看看内核文档,有一个dirty_ratio sysctl可调的,它控制在内核执行自己的sync之前有多少脏数据保存在内存中,您可以尝试降低这个值,这样文件系统缓存中只有很少的页面被标记为“脏”,因此在需要内存时可以被逐出。
https://unix.stackexchange.com/questions/126905
复制相似问题