問題現象
Redis實例CPU使(shi)用率短時間內(nei)沖(chong)高(gao)。
可能原因
- 客戶的業務負載過重,qps過高,導致CPU被用滿,排查方法請參考排查QPS是否過高。
- 使用了keys等消耗資源的命令,排查及處理措施請參考查找并禁用高消耗命令。
- 發生Redis的持久化重寫操作,排查及處理措施請參考是否存在Redis的持久化重寫操作。
排查QPS是否過高
在分(fen)布(bu)式緩存服務(wu)控(kong)(kong)制臺(tai)的(de)緩存管理頁面,單(dan)擊實例進(jin)入實例詳情界面,單(dan)擊左(zuo)側的(de)性(xing)(xing)能監控(kong)(kong),進(jin)去(qu)性(xing)(xing)能監控(kong)(kong)頁面,可以查(cha)詢實例級別的(de)每(mei)秒并發操作(zuo)數(qps)。
查找并禁用高(gao)消耗命令
使用了(le)keys等(deng)消耗(hao)資源的(de)命令(ling),高(gao)消耗(hao)資源的(de)命令(ling)即時間(jian)復(fu)雜度為O(N)或更高(gao)的(de)命令(ling),通(tong)常情況(kuang)下,命令(ling)時間(jian)復(fu)雜度越(yue)高(gao),在執行(xing)時消耗(hao)的(de)資源越(yue)高(gao),這會導(dao)致(zhi)CPU使用率超(chao)高(gao),容易觸發主備倒換(huan)。關于各(ge)命令(ling)對(dui)應的(de)時間(jian)復(fu)雜度信息請(qing)參見。例如,使用了(le)keys等(deng)消耗(hao)資源的(de)命令(ling),導(dao)致(zhi)CPU超(chao)高(gao),建(jian)議客(ke)戶(hu)改成(cheng)scan命令(ling)或者禁用keys命令(ling)。
步驟 1 通過(guo)性能(neng)監控功能(neng),確認CPU使用率高的具體時間段(duan)。


步(bu)驟(zou) 2 通過下述方(fang)法,找出高(gao)消耗(hao)的命令。
- 慢查詢功能會記錄執行超過指定時間閾值的命令,通過分析慢查詢的語句和執行時長可幫助您找出高消耗命令,具體操參見查詢Redis實例慢查詢。
- 通過實例診斷功能,選擇CPU沖高的時間點進行診斷后,可以看到報告中的對應時間段命令的執行情況以及CPU耗時百分比,具體操作參見實例診斷。


步驟 3 處理措施。
- 評估并禁用高風險命令和高消耗命令,例如 FLUSHALL 、 KEYS 、HGETALL等。
- 優化業務,例如避免頻繁執行數據排序操作。
- 可選: 根據業務情況,選擇下述方法對實例進行調整:
調(diao)整實(shi)例為(wei)讀寫(xie)分(fen)離實(shi)例,對高消耗(hao)命令或應用進行分(fen)流。
擴容(rong)實例增強實例處理能力。
是否存在Redis的持久化重寫操作
對(dui)于主備(bei)和集群(qun)實(shi)例,DCS Redis實(shi)例默認(ren)開(kai)啟(qi)AOF數據落(luo)盤,實(shi)例開(kai)啟(qi)了AOF持(chi)久(jiu)化(hua)(hua)功能后(hou),Redis會定期進行(xing)AofRewrite的磁盤整理(li),AOF磁盤持(chi)久(jiu)化(hua)(hua)整理(li)一般在(zai)以(yi)下2種場景執行(xing):
- 數據量寫入不大,AOF文件不大時,固定在每天的凌晨1-4點進行AOF持久化重寫。所以容易出現這個時間點實例CPU使用率超高的現象。
- 數據量寫入過大,AOF文件大小超過閾值(緩存實例容量的3-5倍)時,不論當前的所處的時間,會自動觸發后臺AOF持久化重寫。
Redis的持久化重寫操作(Bgsave或(huo)Bgrewriteaof)比較消(xiao)耗(hao)CPU資(zi)源(請參考),Bgsave和Bgrewriteaof會調(diao)用系統的Fork機(ji)制,造成CPU短暫時間沖高。
如果客戶(hu)沒有需要(yao)用到持久(jiu)化功(gong)能(neng),建議將該功(gong)能(neng)關閉(請(qing)根據實際業務慎重操作,關閉持久(jiu)化功(gong)能(neng)會導致極端(duan)故(gu)障場景下恢復時,由(you)于沒有落盤造成的數(shu)(shu)據丟失)。關閉操作:在(zai)實例(li)詳情頁面,選擇(ze)“實例(li)配置 > 參(can)數(shu)(shu)配置”頁簽,將“appendonly”修(xiu)改(gai)為(wei)“no”。