本文向您介紹常見Latency事件超過閾值時間的原因及處理建議,您可參考本文了解并處理對應的時延問題。
背景信息
原生Redis在2.8.13版引入時延監控(Latency Monitoring)特性,基于事件機制幫助您發現和排查可能的時延問題。該功能僅支持獲取最近160秒的數據,且只存取每秒內時延最高的事件。
常見Latency事件
Latency事件 | 事件描述 | 常見超時原因 | 處理建議 |
EvictionCycle | 一次逐出周期的耗時,包含逐出數據的選擇、刪除操作,及后臺線程等待的時間。 | 可能性較多,需要更進一步分析EvictionDel、EvictionLazyFree事件的耗時。 |
|
EvictionDel | 在逐出周期中刪除Key(鍵)的耗時。 | 通常在逐出大Key時產生。 |
|
EvictionLazyFree | 在逐出周期中,等待后臺線程釋放內存的耗時。 | 如果觸發逐出時沒有符合條件的Key,且后臺線程正在釋放內存(例如刪除大Key)時,則需要等待至后臺線程釋放內存至Maxmemory以下或后臺線程釋放內存結束。 |
|
ExpireCycle | 一次清理過期Key周期的耗時。 | 通常在刪除大Key時產生。 |
|
ExpireDel | 在清理過期Key周期中,刪除Key的耗時。 | 通常在刪除大Key時產生。 | |
AofWrite | 寫入AOF(AppendOnly File)的耗時。每次成功寫入AOF文件后,會記錄AofWrite事件以及AofWriteAlone、AofWriteActiveChild、AofWritePendingFsync三者中的一種事件。 | 可能性較多,需要更進一步分析AofWriteAlone、AofWriteActiveChild、AofWritePendingFsync事件的耗時。 | 如果對數據持久化沒有要求,建議可以關閉appendonly參數,關閉AOF持久化。 |
AofWriteAlone | 一次正常寫入AOF文件的耗時。 | 數據寫入量較大,或磁盤性能存在瓶頸。 | |
AofWriteActiveChild | 寫入AOF文件的耗時,寫入過程中存在其他子進程也在向磁盤寫數據等情況。 | 寫入AOF文件過程中,其他子進程也在向磁盤寫數據。 | |
AofWritePendingFsync | 寫入AOF文件的耗時,寫入過程中存在后臺進程正在執行fsync。 | 寫入AOF文件過程中,存在后臺進程正在執行fsync。 | |
Commands | 常規命令(未被標為fast)的耗時。 | 通常是特殊命令造成,例如執行KEYS命令,遍歷所有數據。 | |
FastCommand | 被標為fast的命令(命令的時間復雜度為O(1)和O(log N))的耗時。 | 通常是對大Key執行命令產生,例如執行 | |
Fork | 調用Fork操作的耗時。 | 通常在AOF Rewrite(重寫)時產生。 | 如果是AOF Rewrite導致,且對數據持久化沒有要求,建議關閉appendonly參數,關閉AOF持久化,關閉后,通常可以解決此類問題。 |
更多信息,請參見Redis Diagnosing latency issues。