我想疑難排解在我的 Amazon ElastiCache for Redis 自行設計的叢集中增加的 CPU 用量。
簡短說明
下列項目是適用於 ElastiCache for Redis 的 Amazon CloudWatch CPU 指標:
- EngineCPUUtilization: 報告 Redis 引擎執行緒的 CPU 使用率。Redis 為單一執行緒。對於具有四個或更多 vCPU 的節點,監控 EngineCPUUtilization 指標為最佳實務。
- CPUUtilization: 指出主機的 CPU 使用率百分比。對於具有兩個或更少 vCPU 的較小節點,請使用 CPUUtilization 指標來監控叢集工作負載。
解決方法
疑難排解高 EngineCPUUtilization
若要疑難排解高 EngineCPUUtilization,請檢查下列內容:
- 長時間執行的命令,消耗高 CPU 時間: 具有高時間複雜性的命令,例如 keys、hkeys 和 hgetall 會消耗高 CPU 時間。若要檢查命令的時間複雜性和效能建議,請參閱 Redis 網站上的命令。如果您使用 Lua 指令碼,則所有伺服器活動都會在執行時期期間遭到封鎖,並且任何 EngineCPUUtilization 都會增加。EVAL 和 EVALSHA Redis 命令會使用 Lua 指令碼。如需詳細資訊,請參閱 Redis 網站上的使用 Lua 編寫指令碼、EVAL 和 EVALSHA。若要檢查是否有長時間執行的命令或 Lua 指令碼,請使用 Redis SLOWLOG。
- 高請求數量: 檢查命令統計資料,以確認命令爆量或延遲增加。若要檢查命令統計資料,請使用 CloudWatch 指標,例如 GetTypeCmds 或 HashBasedCmds。或者,使用 Redis INFO 命令。如需詳細資訊,請參閱 Redis 網站上的 INFO。如果您有高請求數量,並且應用程式工作負載符合預期,則請擴展叢集。
- 備份和複寫: 如果發生備份或複寫,請檢查 SaveInProgress 指標。正在進行背景儲存 (分支或無分支) 時,此二進制指標會顯示 1,而未進行背景儲存時,則會顯示 0。確保有足夠的記憶體來建立 Redis 快照。
- 高 NewConnections 數量: 在短時間內,高新用戶端連線請求數量可能會造成 EngineCPUUtilization 增加。如需處理大量連線時的最佳實務,請參閱最佳實務: Redis 用戶端和 Amazon ElastiCache for Redis。對於 Redis 6.2 及更新版本,已實施效能改進。如需詳細資訊,請參閱 ElastiCache for Redis 6.2 (增強版)。
- 高金鑰移出數量: Redis 會根據 maxmemory-policy 參數移出金鑰。快取沒有足夠的記憶體來容納新資料時,即會發生移出。如果為高移出容量,則 Redis 會使用更多 CPU 資源來移出金鑰,而 EngineCPUUtilization 也會增加。若要監控移出容量,請使用 CloudWatch 指標移出。如果為高移出容量,請使用較大的節點類型或新增更多節點來擴展叢集。
- 高回收次數: 為了釋放記憶體,Redis 會取樣並刪除任何達到逾時到期的金鑰。這個程序稱為回收。如果為高過期數量,CPUUtilization 和 EngineCPUUtilization 可能會增加。若要監控金鑰到期事件的數量,請使用已回收的 CloudWatch 指標 **。**最佳實務是確保太多金鑰不會同時過期。若要確保金鑰在不同的時段過期,請使用 EXPIREAT 命令,或為金鑰設定不同的 TTL 值。如需詳細資訊,請參閱 Redis 網站上的 EXPIREAT。
疑難排解高 CPUUtilization
若要疑難排解高 CPUUtilization,請檢查下列項目: