Amazon RDS耗尽可用内存。我应该担心吗?

时间:2013-03-11 06:03:26

标签: amazon-web-services amazon-rds

我有一个Amazon RDS实例。自设置超过1-2周以来,可用内存一直在下降,从15GB内存下降到大约250MB。由于它在最后几天已经降低了这个低点,它已经开始像一个锯齿模式,其中可用内存下降到这个范围(250 - 350MB),然后以锯齿模式回升到500 - 600MB。

申请质量没有明显下降。但是,我担心数据库会耗尽内存并崩溃。

RDS实例是否存在内存不足的危险?是否有一些设置或参数我应该查看以确定实例是否设置正确?造成这种锯齿模式的原因是什么?

Freeable Memory Declining

4 个答案:

答案 0 :(得分:44)

简短回答 - 您不应该担心FreeableMemory,除非它变得非常低(大约100-200 Mb)或发生重大交换(请参阅RDS SwapUsage指标)。

FreeableMemory不是MySQL指标,而是OS指标。很难给出精确的定义,但你可以将它视为操作系统能够分配给任何请求它的人的内存(在你的情况下它可能是MySQL)。 MySQL有一组设置限制了它的整体内存使用量到某个上限(你可以使用类似this的东西来实际计算它)。您的实例不太可能达到此限制,因为通常您永远不会达到最大连接数,但这仍然是可能的。

现在回到"拒绝"在FreeableMemory指标中。对于MySQL,大部分内存都由InnoDB缓冲池消耗(详见here)。默认情况下,配置中的RDS实例将此缓冲区的大小设置为主机物理内存的75% - 在您的情况下大约为12 GB。此缓冲区用于缓存在读取和写入操作中使用的所有DB数据。 所以在你的情况下,因为这个缓冲区真的很大 - 它正缓慢地填充缓存的数据(这个缓冲区实际上可能足以缓存所有数据库)。因此,当您第一次启动实例时,此缓冲区为空,而不是一旦您开始读取/写入数据库,所有这些数据都将进入缓存。他们将留在这里,直到这个缓存变满,新请求来了。此时,最近最少使用的数据将被新数据替换。因此,数据库实例重启后FreeableMemory的初始下降解释了这一事实。这并不是一件坏事,因为您实际上希望尽可能多地将数据缓存,以便让DB更快地工作。唯一可以讨厌的是当这个缓冲区的部分或全部被推出物理内存进入交换时。那时你将有巨大的性能下降。

作为一种预防性护理,如果您的FreeableMemory指标始终处于100-200 Mb的水平,那么调整用于不同事物的MySQL最大内存可能是一个好主意,只是为了减少交换的可能性。

答案 1 :(得分:42)

MySQL可以使用可用内存字段来缓冲和缓存它自己的进程。可用内存量随着时间的推移而降低是正常的。我不会担心因为它需要更多的空间而踢出旧信息。

答案 2 :(得分:1)

在AWS上获得几张支持通知单后,我发现调整参数组可以帮助您,特别是共享缓冲区,降低它们以保留保留的数量,以避免由于内存不足而导致的丢弃或故障转移

答案 3 :(得分:-1)

我一直面临同样的问题,我实例中的可用内存低于40mb,重新启动实例已经重置了内存。