在AWS的ElastiCache

时间:2016-10-07 06:16:04

标签: amazon-web-services redis amazon-elasticache

我们正在尝试禁用将RAM交换到由AWS的Elasticache管理的Redis实例的磁盘 - 但无法找到合适的属性来执行此操作。

我们也找不到SSH方法并关闭kernerl交换,你能帮忙吗?

3 个答案:

答案 0 :(得分:0)

无法通过SSH连接到Elasticache。

您确定您遇到Redis交换到磁盘或主机内存不足而崩溃的问题(我已经看到这种情况发生在默认配置中)?如果是这样,指导意见是将大约25%的系统内存留给主机进程 - http://docs.aws.amazon.com/AmazonElastiCache/latest/UserGuide/redis-memory-management.html

答案 1 :(得分:0)

虽然不能直接回答有关禁用交换的问题,但我们一直在努力与Redis交换Elasticache。我们最终为解决交换做了以下事情:

  • 跟随Leo建议设置保留内存
  • 运行夜间批处理作业,以批量10,000个扫描所有密钥。 SCAN命令将驱逐任何过期的密钥。这有助于在交换任务之前主动清理缓存。
  • 运行另一个自定义批处理作业,处理我们知道可以驱逐的实体。这些实体不像缓存中的其他实体那么重要。我们设置了密钥,因此它们包含足够的信息,可以轻松识别与实体关联的密钥。使用带匹配的SCAN查找密钥。找到它们后,在每个上面调用DEL。仅此批处理作业在Redis实例中节省了大量空间。请注意,避免使用KEYS命令,因为它很慢并且会阻塞其他线程。

我们已经使用上面几周了,到目前为止它一直运作良好。再过几周,我们就会知道它有多好,因为我们的默认TTL为30天,缓存项目的数量仍然在增加。

祝你好运!

<强>更新

我们关闭了在所有键上使用SCAN的作业。我们发现它导致交换缓慢上升(每隔一天大约500k)。一旦我们关闭它,交换就开始萎缩。设置保留内存和我们知道可以过期的刷新对象的组合运行良好。当redis开始耗尽房间时,它会驱逐任何过期的缓存对象,为新条目腾出空间。我们注意到的唯一影响是CPU使用量的小幅增加,这不会造成任何麻烦。

答案 2 :(得分:0)

我有一个类似的问题,即使我们使用Allkeys-LRU算法,AWS中的Elasticache(Redis)突然开始使用交换空间。在过去的几周里,这台机器在消耗整个内存的过程中一直没有使用交换功能,直到一个清晨改变为止。

我使用了命令

redis-cli -h elasticache.service-name memory DOCTOR

输出为->

  • 高分配器碎片:此实例的分配器外部碎片大于1.1。这个问题通常是由于 要么到一个大的峰值内存(检查是否有峰值内存条目 报告中的上述内容),或者可能是由导致 分配器使内存碎片很多。您可以尝试启用 “ activedefrag”配置选项。

使用命令检查

redis-cli -h elasticache.service-name memory STATS

我看到碎片整理值很高(1.4)

我查看了AWS控制台上的Elasticache-Redis参数,并将碎片整理设置设为true(因为它设置为false)。