常见Latency(时延)事件的处理建议
更新时间:2024-07-26
本文向您介绍常见Latency事件超过阈值时间的原因及处理建议,您可参考本文了解并处理对应的时延问题。
背景信息
原生Redis在2.8.13版引入时延监控(Latency Monitoring)特性,基于事件机制帮助您发现和排查可能的时延问题。该功能仅支持获取最近160秒的数据,且只存取每秒内时延最高的事件。
常见Latency事件
Latency事件 | 事件描述 | 常见超时原因 | 处理建议 |
---|---|---|---|
EvictionCycle | 一次逐出周期的耗时,包含逐出数据的选择、删除操作,及后台线程等待的时间。 | 可能性较多,需要更进一步分析EvictionDel、EvictionLazyFree事件的耗时。 | 检查业务是否存在不必要的数据,并进行优化。 扩容实例规格,尽量避免到达Maxmemory触发内存逐出。 |
EvictionDel | 在逐出周期中删除Key(键)的耗时。 | 通常在逐出大Key时产生。 | 尽量避免使用大Key。* 开启lazyfree-lazy-eviction参数,使用异步逐出模式。扩容实例规格,尽量避免到达Maxmemory触发内存逐出。 |
EvictionLazyFree | 在逐出周期中,等待后台线程释放内存的耗时。 | 如果触发逐出时没有符合条件的Key,且后台线程正在释放内存(例如删除大Key)时,则需要等待至后台线程释放内存至Maxmemory以下或后台线程释放内存结束。 | 根据业务需求,修改maxmemory-policy参数,调整内存逐出策略。扩容实例规格,尽量避免到达Maxmemory触发内存逐出。 |
ExpireCycle | 一次清理过期Key周期的耗时。 | 通常在删除大Key时产生。 | 尽量避免使用大Key。 开启lazyfree-lazy-expire参数,使用异步逐出模式。 |
ExpireDel | 在清理过期Key周期中,删除Key的耗时。 | 通常在删除大Key时产生。 | 尽量避免使用大Key。 开启lazyfree-lazy-expire参数,使用异步逐出模式。 |
AofWrite | 写入AOF(AppendOnly File)的耗时。每次成功写入AOF文件后,会记录AofWrite事件以及AofWriteAlone、AofWriteActiveChild、AofWritePendingFsync三者中的一种事件。 | 可能性较多,需要更进一步分析AofWriteAlone、AofWriteActiveChild、AofWritePendingFsync事件的耗时。 | 如果对数据持久化没有要求,建议可以关闭appendonly参数,关闭AOF持久化。 |
AofWriteAlone | 一次正常写入AOF文件的耗时。 | 数据写入量较大,或磁盘性能存在瓶颈。 | 如果对数据持久化没有要求,建议可以关闭appendonly参数,关闭AOF持久化。 |
AofWriteActiveChild | 写入AOF文件的耗时,写入过程中存在其他子进程也在向磁盘写数据等情况。 | 写入AOF文件过程中,其他子进程也在向磁盘写数据。 | 如果对数据持久化没有要求,建议可以关闭appendonly参数,关闭AOF持久化。 |
AofWritePendingFsync | 写入AOF文件的耗时,写入过程中存在后台进程正在执行fsync。 | 写入AOF文件过程中,存在后台进程正在执行fsync。 | 如果对数据持久化没有要求,建议可以关闭appendonly参数,关闭AOF持久化。 |
Commands | 写常规命令(未被标为fast)的耗时。 | 通常是特殊命令造成,例如执行KEYS命令,遍历所有数据。 | 使用查询慢日志功能,确定具体的慢命令。使用大Key分析功能,排查实例是否存在大Key。 |
FastCommand | 被标为fast的命令(命令的时间复杂度为O(1)和O(log N))的耗时。 | 通常是对大Key执行命令产生,例如执行GET命令,拷贝大量数据。 | 使用查询慢日志功能,确定具体的慢命令。使用大Key分析功能,排查实例是否存在大Key。 |
Fork | 调用Fork操作的耗时。 | 通常在AOF Rewrite(重写)时产生。 | 如果是AOF Rewrite导致,且对数据持久化没有要求,建议关闭appendonly参数,关闭AOF持久化,关闭后,通常可以解决此类问题。 |
更多信息,请参见Redis Diagnosing latency issues。