AWS RDS低可用内存和正在使用的交换

时间:2018-10-15 12:06:07

标签: mysql memory-leaks innodb amazon-rds

我有一个t2.medium RDS(4G内存和MySQL 5.7.22),具有以下全局变量:

  • innodb_buffer_pool_chunk_size-0.125G
  • innodb_buffer_pool_instances-8
  • innodb_buffer_pool_size-3G

这是 SHOW ENGINE INNODB STATUS; 的结果:

----------------------
BUFFER POOL AND MEMORY
----------------------
Total large memory allocated 3298295808
Dictionary memory allocated 1021071
Buffer pool size   196608
Free buffers       8192
Database pages     182510
Old database pages 67208
Modified db pages  46
Pending reads      0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 11507859, not young 812666330 1.12 youngs/s, 5324.32 non-youngs/s
Pages read 8720629, created 157094, written 2516637 5.27 reads/s, 0.00 creates/s, 12.40 writes/s
Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 22 / 1000
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 182510, unzip_LRU len: 0
I/O sum[6344]:cur[0], unzip sum[0]:cur[0]

可释放内存始终仅在85Mb和105MB之间,并且Swap正在使用大约70MB。即使在RDS上几乎没有进程在运行,该常数也保持不变。

如果我们需要更新buffer_pool变量,或者是否有其他方法可以调试此内存问题,有人可以指导我吗?

1 个答案:

答案 0 :(得分:1)

只有4G RAM,使innodb_buffer_pool_size不大于2G。这可能足够低,可以消除交换问题。

我希望innodb_buffer_pool_instances - 8G是一个错字。我建议1或2,而不是数千,而不是数百万,当然也不是数十亿。

通常,RDS应该将所有可调参数设置为合理的值。

Cron

如果有一个迭代在下一次启动之前没有完成的机会,请不要使用类似cron的机制。相反,要有一个连续运行的脚本(或程序)来执行一个块,休眠一会儿,然后重复执行。这将(1)尽快完成任务,并且(2)不会由于实例相互绊倒而导致崩溃(或部分崩溃)。