我在 db.m2.4xlarge 类的 RDS 实例上遇到内存问题。
以下是RDS实例的规格
实例类:db.m2.4xlarge(68.4 GB RAM)
引擎:mysql (5.5.37)
IOPS:8000
存储空间:805GB(128GB 数据)
多可用区:是
自动备份:已启用(5 天)
mysql 实例在不更改 InnoDB 缓冲区值的情况下进行了调整。
总缓冲区:23.9G 全局 + 每个线程 3.0M(1000 个最大线程)
最大可能内存使用量:26.8G(已安装 RAM 的 42%)
InnoDB 表中的数据:98G
之前,我们曾经有更高的缓冲区值,这是更优化的,但是重新启动的频率使我们将其减少回 RDS 设置的默认缓冲区大小。
我们的应用程序从 4 个 ColdFusion 服务器和 4 个 asp.net 服务器工作,它们都与相关的 MySQL RDS 实例通信。我们正在为应用程序使用连接池。所有的 DML 语句都是使用存储过程完成的,并且它们被非常频繁地执行。
我的问题是 RDS 实例如果单独存在,会慢慢消耗内存并开始交换。当它交换时,我们的应用程序开始一一失败。因此,我们只有重新启动实例的唯一选择。目前,每当内存低于 5 GB 时,我们都会重新启动服务器。
我们采用的另一种方法是重新启动冷融合服务器,重新启动 IIS,然后发出“刷新表”查询。但这有时会产生结果,但有时没有变化。理论上,我相信即使没有刷新表查询,内存也应该被释放,这不会发生。同样,释放的内存通常在 1-7 GB 的范围内。
MySQL 的交互式超时设置为 300 秒,ColdFusion 连接生存期为 300 秒,asp.net 中设置的超时为 270 秒。
我无法追踪正在使用内存的内容并将其保留给自己。理想情况下,内存应该在 MySQL 需要时被释放。但它并没有发生。
我需要一些关于如何追踪内存占用的指导,以便 RDS …