我们一直在为我们的应用程序使用AWS Elasticache。我们最初将CPU警报阈值设置为22%(4核心节点,因此有效地使用90%CPU),这是基于建议的阈值。但我们经常看到CPU利用率超过25%,达到28%,34%。
我想要了解的是,考虑到Redis是单线程的,这在理论上是如何可行的?我认为可能发生这种情况的唯一方法是,如果在其他核心上发生维护操作,这可能会影响CPU使用率> 25%。即使群集负载很高,它也应该将CPU使用率限制在25%,并且可能会为客户端启动超时。有人可以帮我理解在什么情况下单线程Redis实例的CPU使用率可以超过100%的CPU利用率吗?
答案 0 :(得分:1)
Redis事件循环是单线程的。 Redis进程本身不是。有一些额外的线程可以使某些I / O绑定操作脱机。现在,这些线程不应该消耗CPU。
然而,Redis还要求子进程负责AOF重写或RDB保存等重载操作。除Redis事件循环消耗之外,每个分叉进程通常消耗100%的CPU内核(除非操作因I / O而减慢)。
如果您发现CPU消耗通常很高,可能是由于错误的AOF和RDB配置(即Redis实例重写AOF或过于频繁地生成转储)。