2016-12-15 75 views
1

我们一直在为我们的应用程序使用AWS Elasticache。我们最初设置了22%的CPU警报阈值(4个核心节点,90%的CPU使用率),这是基于建议的阈值。但是我们经常看到CPU利用率超过25%,比如28%,34%。AWS Elasticache CPU使用率超过100%

我想了解的是,考虑到Redis是单线程的,理论上这是如何可能的?我认为这种情况发生的唯一方法是在其他内核上发生维护操作,这可能会导致CPU使用率> 25%。即使群集负载很高,它应该将CPU使用率限制在25%,并可能开始为客户端超时。有人可以帮助我理解在什么情况下,单线程Redis实例的CPU使用率可以跨越100%的CPU使用率?

回答

1

Redis事件循环是单线程的。 Redis进程本身不是。有几个额外的线程可以脱机某些I/O绑定操作。现在,这些线程不应该占用CPU。

但是,Redis还会分流子进程以处理重载操作,如AOF重写或RDB保存。在Redis事件循环消耗的基础上,每个分叉进程通常占用100%的CPU内核(除非I/O操作速度减慢)。

如果发现CPU消耗量经常较高,可能是由于AOF和RDB配置错误(即Redis实例重写AOF或频繁产生转储)。