AWS RDS 低可用内存和正在使用的交换
AWS RDS low freeable memory and swap being used
我有一个 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 变量,或者是否有任何其他方法来调试此内存问题,谁能指导我?
只有4G内存,innodb_buffer_pool_size
不要大于2G。这可能低到足以解决交换问题。
我希望 innodb_buffer_pool_instances - 8G
是一个错字。我会推荐 1 或 2,不是数千,不是数百万,当然也不是数十亿。
一般来说,RDS 应该已将所有可调参数设置为合理的值。
Cron
如果一个迭代有可能在下一个迭代启动之前未完成,请不要使用类似 cron 的机制。相反,有一个连续 运行 的脚本(或程序)执行一个块,休眠一段时间,然后重复。这将 (1) 更快地完成任务,并且 (2) 不会由于实例相互绊倒而导致崩溃(或部分崩溃)(它 将 发生)。
我有一个 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 变量,或者是否有任何其他方法来调试此内存问题,谁能指导我?
只有4G内存,innodb_buffer_pool_size
不要大于2G。这可能低到足以解决交换问题。
我希望 innodb_buffer_pool_instances - 8G
是一个错字。我会推荐 1 或 2,不是数千,不是数百万,当然也不是数十亿。
一般来说,RDS 应该已将所有可调参数设置为合理的值。
Cron
如果一个迭代有可能在下一个迭代启动之前未完成,请不要使用类似 cron 的机制。相反,有一个连续 运行 的脚本(或程序)执行一个块,休眠一段时间,然后重复。这将 (1) 更快地完成任务,并且 (2) 不会由于实例相互绊倒而导致崩溃(或部分崩溃)(它 将 发生)。