【Azure Redis 缓存】Redis性能指标之Server Load
Server Load描述
在Redis的官方介绍中,Server Load指标是Redis 服务器忙于处理消息并且非空闲等待消息的周期百分比。 如果此计数器达到 100,则意味着 Redis 服务器已达到性能上限并且 CPU 无法更快地工作。 它受Memory, CPU, Connections, Operations(操作数), 网络写入/写出,需执行的指令等因素影响。
引起Service Load高的情况有
- Memory达到当前Redis级别使用上限,可以根据指标Memroy来查看。
- CPU限制:操作是否占用了服务器或客户端上的大量 CPU?是否存在需要在服务器上进行长时间处理的命令? 在 Redis 服务器上花费很长时间处理请求的命令可能会导致超时。运行 SLOWLOG 命令查看是否存在比预期速度更慢的请求 。
- 带宽限制:如果请求受服务器或客户端上的带宽限制的约束,则需要更长的时间才能完成,因此可能会导致超时。
- 连接数限制:每一次建立新的连接都是一次昂贵的操作,所以如果瞬间连接数升高且过多,都会引起Service Load升高。
Server Load高引发的后果
服务器负载或 CPU 使用率偏高意味着服务器无法及时处理请求。 服务器可能会减慢响应速度,且无法跟上请求速率。如果看到高 Redis 服务器负载,则会在客户端看到超时异常。
示例1:使用KEYS命令或者SCAN(扫描全库)而导致Server Load高,引起新的连接无法建立
由于KEYS命令是时间复杂度为O(N)的命令,Redis是单线程工作的,KEYS会阻塞其他命令的执行,所以不建议使用KEYS。一般情况下会使用SCAN,一次scan命令是时间复杂度为O(1)的,但是如果进行full scan的话,那时间复杂度和KEYS是一样的,为O(N)。所以也要避免做full scan。
(执行SCAN命令的耗时,耗时2.5秒,非常耗时)
根据文档Redis SCAN介绍(https://redis.io/commands/scan) 命令执行一次是会返回一些数据和一个光标值的,在下一次调用时指定该光标值,直到光标值返回为0。所以在调用SCAN时候需要谨慎使用。
参考资料
监视 Azure Cache for Redis: https://docs.microsoft.com/zh-cn/azure/azure-cache-for-redis/cache-how-to-monitor
排查 Azure Cache for Redis 服务器端问题: https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-troubleshoot-server#high-cpu-usage-or-server-load
Azure Redis 缓存的最佳做法: https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-best-practices
Redis SCAN:https://redis.io/commands/scan
集群中keys的分布是使用哈希算法处理的,如果客户指定了Keys相同的部分进行哈希操作,那这些key会被放到同一分片,具体可以参考:https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-how-to-premium-clustering#how-are-keys-distributed-in-a-cluster
- 【Azure Redis 缓存】使用Python代码获取Azure Redis的监控指标值 (含Powershell脚本方式)
- 【Azure Redis 缓存 Azure Cache For Redis】使用Redis自带redis-benchmark.exe命令测试Azure Redis的性能
- 【Azure Redis 缓存 Azure Cache For Redis】Azure Cache for Redis有默认备份可以用于恢复么?
- C# Redis Server分布式缓存编程(一)(转)
- JMeter接口压测——ServerAgent监控服务端性能指标
- 【Azure Redis 缓存】Azure Redis 功能性讨论二
- C# Redis Server分布式缓存编程(二)(转)
- Redis性能指标详解与监控
- 性能测试指标的理解--cpu和load
- HashMap作为缓存时的性能优化及与redis,EhCache等的应用比较
- 【Azure Redis 缓存 Azure Cache For Redis】Azure Redis删除 TLS 1.0 和 1.1的计划及问题
- 如何监控Redis性能指标(译)
- 前端性能指标分析-Start Render、DOM Ready、Page Load、TTI
- 如何将 Azure Redis 缓存与 Java 配合使用
- 使用RedisTemplate键出现乱码(Can not load key value.Key was removed or redis-server went away.)
- 【Azure Redis 缓存】如何得知Azure Redis服务有更新行为?
- 如何监控Redis性能指标(译)
- 使用Openresty接收前端性能监控指标并存入Redis
- 【Azure Redis 缓存 Azure Cache For Redis】Redis支持的版本及不同版本迁移风险
- Peformance Monitor中的Biztalk Server性能监测指标