AWS RDS:Freeable Memory和Swap Usage中的随机高峰

我有一个db.m4.large RDS实例在生产上运行。 我正在经历Freeable Memory和Swap Usage的临时性下降,我试图找出原因。

以下是我在CloudWatch中可以看到的一些数据的屏幕截图。

自由记忆 – 1周的时间

交换使用 – 1周期间

数据库连接数量 – 1周期间

收到的客户请求数 – 1周期间

我首先注意到,尖峰几乎总是在同一天发生,只在平日。 我检查了这些时间是否在RDS实例的维护和备份时间窗口内,但事实并非如此。 然后,我寻找任何可能触发这些尖峰,但找不到任何cron工作。 所有的cron工作,无论是工作日还是周末。 此外,他们每分钟或每小时运行一次,这与我在CloudWatch中可以看到的数据无关。 每天只有一个作业运行,但是它还原并使用已经创build的RDS实例的快照。 另外,这项工作也每天,平日和周末。

我注意到当这些尖峰发生时数据库的连接数量下降,但是由于连接数量不断变化,我无法判断是否存在关系。

我查看了我的应用程序的日志,但发现峰值时找不到任何exception活动。 发生峰值时收到的所有客户端请求都是在白天不断收到的请求。 在stream量方面,发生峰值时收到的客户端请求的数量通常是当天的最低水平(通常发生在上午4:30)。

最后,我明白了我的慢查询日志(其阈值设置为2秒),但没有一个单一的条目。

我联系了AWS支持,要求他们看看机器的硬件,他们告诉我硬件似乎完全正常。 他们还确认了Freeable Memory和Swap Usage之间的关联,并指出了一些与MySQL / InnoDB如何处理内存表和内部临时表有关的文档。 他们补充说,我的实例可能会保留一些临时表和/或内部表,并清理一旦相关的连接closures,并关联的线程被破坏。 但是,考虑到这些尖峰只能持续3分钟,我不确定这里的关系。

如果有人曾经尝试过这种情况和/或会有什么build议,我会开始用尽想法,我真的很棒。

提前致谢。