2016-12-15 148 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或頻繁產生轉儲)。