如果Tair (Redis OSS-compatible)執行個體的記憶體使用量率突然飆升,可參考本文排查原因並解決問題。
問題現象
Tair (Redis OSS-compatible)執行個體之前的記憶體使用量率較低。但從某個時間點開始,記憶體使用量率突然迅速升高,甚至達到100%。
問題原因
可能記憶體使用量率突然升高的主要原因如下:
短時間內大量寫入新資料。
短時間內大量建立新串連。
突發訪問產生大量流量超過網路頻寬,導致輸入緩衝區和輸出緩衝區積壓。
用戶端處理速度跟不上執行個體的處理速度,導致輸出緩衝區積壓。
解決方案
請依次排查記憶體使用量率突然升高的原因,並參考對應的解決方案解決問題。
排查是否寫入大量新資料
排查方法:
查看效能監控的入流量與寫QPS。如果入流量與寫QPS的趨勢與記憶體使用量率的趨勢一致,說明大量的資料寫入導致記憶體使用量率突然升高。
解決方案:
通過設定Key的到期時間自動清理不再需要的Key,或手動刪除不再需要的Key。
升級執行個體規格,通過增加記憶體容量緩解記憶體使用量率升高的問題。詳情請參見變更執行個體配置。
如果您的執行個體為標準版,擴容記憶體規格後仍無法解決記憶體使用量率高的問題,可以考慮升級為叢集版,將資料分布到多個資料分區節點上,減輕單個資料分區節點的記憶體壓力。詳情請參見變更執行個體配置。
排查是否建立大量新串連
排查方法:
查看效能監控的串連數。如果串連數突然增長,且與記憶體使用量率的趨勢一致,說明大量建立串連導致記憶體使用量率突然升高。
解決方案:
排查是否存在串連泄漏。
設定連線逾時時間,自動關閉空閑串連。詳情請參見設定用戶端串連的空閑時間。
排查是否突發流量導致輸入和輸出緩衝區積壓
排查方法:
查看效能監控的出入口流量使用率是否達到100%。
執行
MEMORY STATS
命令,查看clients.normal佔用的記憶體是否過多。說明clients.normal反映了所有普通用戶端串連的輸入和輸出緩衝區所佔用的記憶體總量。
解決方案:
排查業務流量突發原因。
增加執行個體的網路頻寬。詳情請參見手動增加執行個體頻寬和開啟頻寬Auto Scaling。
升級執行個體規格,以保證輸入輸出緩衝區的使用。詳情請參見變更執行個體配置。
排查是否因用戶端效能問題導致輸出緩衝區積壓
排查方法:
在執行個體中,執行MEMORY DOCTOR
命令,查看big_client_buf
的值。當big_client_buf=1時,代表至少有一個用戶端的輸出緩衝區佔用記憶體較大。
解決方案:
執行CLIENT LIST
命令,查看哪個用戶端的輸出緩衝區記憶體佔用量(omem
)較大。排查該用戶端應用是否存在效能問題。