我在尝试插入 Elasticache redis 节点时不时收到"OOM command not allowed when used memory > 'maxmemory'"
错误。
我从一个自我管理的redis实例(maxmemory = 12Go,maxmemory-policy = allkeys-lru(变成了一个Elasticache redis实例(r5.large,即maxmemory = 14 Go,maxmemory-policy = allkeys-lru(。
但是,在迁移密钥后,我不时"OOM command not allowed when used memory > 'maxmemory'"
遇到我无法理解的错误。
我已经检查了他们在这里的建议:https://aws.amazon.com/premiumsupport/knowledge-center/oom-command-not-allowed-redis/解决问题,但到目前为止:
- 我的所有密钥都有 TTL
- 我已经在全键-lru
- 当我查看节点可用内存时,我有大约 7Go 可用
这是INFO memory
时的输出
# Memory
used_memory:10526693040
used_memory_human:9.80G
used_memory_rss:11520012288
used_memory_rss_human:10.73G
used_memory_peak:10560011952
used_memory_peak_human:9.83G
used_memory_peak_perc:99.68%
used_memory_overhead:201133315
used_memory_startup:4203584
used_memory_dataset:10325559725
used_memory_dataset_perc:98.13%
allocator_allocated:10527575720
allocator_active:11510194176
allocator_resident:11667750912
used_memory_lua:37888
used_memory_lua_human:37.00K
used_memory_scripts:0
used_memory_scripts_human:0B
number_of_cached_scripts:0
maxmemory:10527885773
maxmemory_human:9.80G
maxmemory_policy:allkeys-lru
allocator_frag_ratio:1.09
allocator_frag_bytes:982618456
allocator_rss_ratio:1.01
allocator_rss_bytes:157556736
rss_overhead_ratio:0.99
rss_overhead_bytes:-147738624
mem_fragmentation_ratio:1.09
mem_fragmentation_bytes:993361528
mem_not_counted_for_evict:0
mem_replication_backlog:1048576
mem_clients_slaves:0
mem_clients_normal:153411
mem_aof_buffer:0
mem_allocator:jemalloc-5.1.0
active_defrag_running:0
lazyfree_pending_objects:0
如果您对如何解决此问题有任何线索。 谢谢!
ElastiCache 使用 EC2 实例,例如示例中具有 16Gib 内存的 r5.large。但是,您会注意到,ElastiCache 的实例类型始终以cache.
为前缀,并且它们略有不同。如果您在 ElastiCache 定价页面中查找这些实例,您会发现它们具有不同的内存值。对于 cache.r5.large,可用于在内存中存储数据的内存量为 13.07GiB。
这就是您看到 7GiB 可用内存的原因,它是实例的整体可用内存,在这种情况下为 16GiB - 但您无法利用所有这些内存。只有 13.07GiB 出来。
最重要的是,ElastiCache还管理预留内存。保留内存是为非数据用途(如备份、故障转移等(预留的内存。默认值为 25%(对于 2017 年 3 月 16 日之后创建的所有集群( - 这就是您的最大内存设置为 9.8GiB 的原因。
鉴于您遵循了提到的建议,因为当使用的内存高于最大内存时,我认为有两种选择:
- 减少保留内存。但是,这可能会给上述非数据操作带来风险。
- 纵向/横向扩展,从而减少每个节点上的内存。