我们的ElastiCache Redis实例交换一直遇到麻烦。亚马逊似乎已经进行了一些粗略的内部监控,这些监控注意到交换使用量激增,并只是重新启动了ElastiCache实例(从而丢失了所有缓存的项目)。这是过去14天中我们的ElastiCache实例上BytesUsedForCache(蓝线)和SwapUsage(橙线)的图表:
您可以看到交换使用量增加的模式似乎触发了我们的ElastiCache实例的重新启动,其中我们丢失了所有缓存的项目(BytesUsedForCache降至0)。
我们的ElastiCache仪表板的“缓存事件”选项卡具有相应的条目:
源ID | 类型 日期 事件
缓存实例ID | 缓存集群| 2015年9月22日星期二07:34:47 GMT-400 | 缓存节点0001重新启动
缓存实例ID | 缓存集群| 2015年9月22日星期二07:34:42 GMT-400 | 重新启动节点0001上的缓存引擎时出错
缓存实例ID | 缓存集群| 2015年9月20日,星期日11:13:05 GMT-400 | 缓存节点0001重新启动
缓存实例ID | 缓存集群| 2015年9月17日星期四22:59:50 GMT-400 | 缓存节点0001重新启动
缓存实例ID | 缓存集群| 2015年9月16日星期三10:36:52 GMT-400 | 缓存节点0001重新启动
缓存实例ID | 缓存集群| 2015年9月15日星期二05:02:35 GMT-400 | 缓存节点0001重新启动
(剪下之前的条目)
SwapUsage-在正常使用中,Memcached和Redis均不应执行交换
我们的相关(非默认)设置:
- 实例类型:
cache.r3.2xlarge
maxmemory-policy
:allkeys-lru(以前我们一直使用默认的volatile-lru并没有太大区别)maxmemory-samples
:10reserved-memory
:2500000000- 检查实例上的INFO命令,我看到
mem_fragmentation_ratio
介于1.00和1.05之间
我们已经联系了AWS支持人员,但没有得到很多有用的建议:他们建议提高预留的存储空间(默认值为0,并且有2.5 GB的预留空间)。我们没有为此高速缓存实例设置复制或快照,因此我认为不应发生BGSAVE并引起额外的内存使用。
maxmemory
cache.r3.2xlarge 的上限为62495129600字节,尽管我们reserved-memory
很快达到了上限(减去了我们的上限),但我感到奇怪的是,主机操作系统在这里如此之快地使用这么多的交换会感到压力很大,除非亚马逊出于某些原因提高了操作系统的可交换性设置。有什么想法为什么会在ElastiCache / Redis上导致大量交换使用,或者我们可以尝试解决方法?