我在生产环境中运行一个 db.m4.large RDS 实例。我经常遇到可用内存和交换使用量暂时下降的情况,我正在尝试找出原因。
以下是我在 CloudWatch 中看到的一些数据的屏幕截图。
我首先注意到峰值几乎总是在一天中的同一时间发生,并且只在工作日发生。我检查了这些时间是否在可以为 RDS 实例设置的维护和备份窗口内,但事实并非如此。然后我寻找任何可能触发这些峰值的 cron 作业,但找不到。我运行的所有 cron 作业,无论当天是工作日还是周末。此外,它们每分钟或每小时运行一次,这与我在 CloudWatch 中可以看到的数据不相关。每天运行的作业只有一个,但它会恢复并使用已创建的 RDS 实例快照。此外,该作业每天、工作日和周末也运行。
我注意到当出现这些峰值时,数据库的连接数会下降,但由于连接数不断变化,我无法判断是否存在关系。
我查看了我的应用程序的日志,但在出现峰值时没有发现任何异常活动。出现峰值时收到的所有客户端请求都是白天不断收到的请求。从流量方面来看,出现峰值时收到的客户端请求数量通常处于一天中的最低水平(通常发生在凌晨 4:30)。
最后,我显然看了一下我的慢查询日志(其阈值设置为 2 秒),但没有一条条目。
我联系了 AWS Support,请他们检查一下机器的硬件,他们告诉我硬件看起来完全没问题。他们还确认了可用内存和交换使用量之间的关联,并向我提供了一些与 MySQL/InnoDB 如何处理内存表和内部临时表相关的文档。他们补充说,我的实例可能会保留一些临时表和/或内部表,并在相关连接关闭和相关线程被销毁后清理它们。然而,考虑到这些峰值只持续 3 分钟,我不确定这里的关系。
我开始没有什么主意了,如果有人曾经尝试过这种情况和/或能提出建议,我会很高兴的。
提前致谢。