Server Load描述

在Redis的官方介绍中,Server Load指标是Redis 服务器忙于处理消息并且非空闲等待消息的周期百分比。 如果此计数器达到 100,则意味着 Redis 服务器已达到性能上限并且 CPU 无法更快地工作。 它受MemoryCPU,  ConnectionsOperations(操作数), 网络写入/写出需执行的指令等因素影响。

引起Service Load高的情况有

  1. Memory达到当前Redis级别使用上限,可以根据指标Memroy来查看。
  2. CPU限制:操作是否占用了服务器或客户端上的大量 CPU?是否存在需要在服务器上进行长时间处理的命令? 在 Redis 服务器上花费很长时间处理请求的命令可能会导致超时。运行 SLOWLOG 命令查看是否存在比预期速度更慢的请求 。
  3. 带宽限制:如果请求受服务器或客户端上的带宽限制的约束,则需要更长的时间才能完成,因此可能会导致超时。
  4. 连接数限制:每一次建立新的连接都是一次昂贵的操作,所以如果瞬间连接数升高且过多,都会引起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 缓存】Redis性能指标之Server Load的更多相关文章

  1. 第二百九十四节,Redis缓存-Redis安装

    redis简介 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sor ...

  2. 【Azure Redis 缓存 Azure Cache For Redis】Redis性能问题,发现Server Load非常的高,导致正常连接/操作不成功

    问题描述 在正常使用Azure Redis的服务中,突然发现Redis 的CPU达到了100%, 正常的使用中发现性能问题严重.从Redis的门户图表中,观察到CPU, Connection,Lent ...

  3. ThinkPHP5配置redis缓存

    thinkphp采用cache类提供缓存功能支持,采用驱动方式,在使用缓存之前需要进行初始化操作.支持的缓存类型包括file.memcache.wincache.sqlite.redis和xcache ...

  4. thinkphp5的Redis缓存配置

    thinkphp采用cache类提供缓存功能支持,采用驱动方式,在使用缓存之前需要进行初始化操作.支持的缓存类型包括file.memcache.wincache.sqlite.redis和xcache ...

  5. TP5中用redis缓存

    在config.php配置文件下找到缓存设置,将原来的文件缓存修改为redis缓存,也可以改为多种类型的缓存: // +---------------------------------------- ...

  6. Azure Redis 缓存使用注意事项与排查问题文档整理

    StackExchange.Redis 使用名为 synctimeout 的配置设置进行同步操作,该设置的默认值为 1000 毫秒. 如果同步调用未在规定时间内完成,StackExchange.Red ...

  7. Azure Redis 缓存的 ASP.NET 会话状态提供程序

    Azure Redis Cache 提供了一个会话状态提供程序,你可以使用其在缓存中(而不是内存中或在 SQL Server 数据库中)存储会话状态.要使用缓存会话状态提供程序,先首先配置缓存,然后使 ...

  8. 【Azure Redis 缓存 Azure Cache For Redis】当使用Jedis客户端连接Redis时候,遇见JedisConnectionException: Could not get a resource from the pool / Redis connection lost

    问题情形 当在执行Redis一直指令时,有可能会遇见如下几种错误: 1) redis.clients.jedis.exceptions.JedisConnectionException: Could ...

  9. 【Azure Redis 缓存 Azure Cache For Redis】使用Redis自带redis-benchmark.exe命令测试Azure Redis的性能

    问题描述 关于Azure Redis的性能问题,在官方文档中,可以查看到不同层级Redis的最大连接数,每秒处理请求的性能. 基本缓存和标准缓存 C0 (250 MB) 缓存 - 最多支持 256 个 ...

  10. 【Azure Redis 缓存 Azure Cache For Redis】Azure Redis由低级别(C)升级到高级别(P)的步骤和注意事项, 及对用户现有应用的潜在影响,是否需要停机时间窗口,以及这个时间窗口需要多少的预估问题

    问题描述 由于Azure Redis的性能在不同级别表现不同,当需要升级/缩放Redis的时候,从使用者的角度,需要知道有那些步骤? 注意事项? 潜在影响?停机事件窗口? 升级预估时间? 解决方案 从 ...

随机推荐

  1. Find -mtime 的图解

  2. clickhouse 优化实践,万级别QPS数据毫秒写入和亿级别数据秒级返回 | 京东云技术团队

    1.背景 魔笛活动平台目前在采集每个活动的用户行为数据并进行查询,解决线上问题定位慢,响应不及时的问题,提升客诉的解决效率.目前每天采集的数据量5000万+,一个月的数据总量15亿+,总数据量40亿+ ...

  3. 【计数,DP】ABC306Ex Balance Scale

    Problem Link 现在有 \(n\) 个球,每个球有一个重量,重量未知.接下来会进行 \(m\) 次称重,每次给定 \(a_i\) 和 \(b_i\),比较这两个球的重量,结果可能是 \(&g ...

  4. 【解决了一个小问题】vm-agent中,如何对envoy这样的特殊expoter路径做处理?

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 envoy这个组件的expoter路径为 /stats/p ...

  5. 8.5 CheckRemoteDebuggerPresent

    CheckRemoteDebuggerPresent 也是一个微软提供的反调试函数,该函数可以在本地或者远程进程中使用.函数接收两个参数进程句柄和一个指向布尔值的指针.如果指定的进程正在被调试,则函数 ...

  6. Linux-mysql的备份与恢复

    数据库 备份 mysqldump(mysql自带备份功能) - 锁表 - 备份特别慢,适用于数据量较小 - 不可以做增量备份 - 单线程 ``` -A, --all-databases 所有的库 -B ...

  7. 练习(Java):将一个数转换为16进制;获得多位数的各个位上的数

    //将一个数转换为十六进制 int num = 60; int i1 = num % 16; int i2 = num % (16*16) / 16; int i3 = num % (16*16*16 ...

  8. 浅谈一下对于 js 中的 this 的理解

    浅谈一下对于 js 中的 this 的理解 对于 this 值的定义: 简单来说 this 是一个对象,这个对象具体的值是什么,取决于运行时的环境,即代码执行时的环境. MDN: 当前执行上下文( g ...

  9. 实现阿里云模型服务灵积 DashScope 的 Semantic Kernel Connector

    Semantic Kernel 内置的 IChatCompletionService 实现只支持 OpenAI 与 Azure OpenAI,而我却打算结合 DashScope(阿里云模型服务灵积) ...

  10. SP9494 ZSUM - Just Add It 题解

    题目传送门 前置知识 快速幂 解法 推式子: \(\begin{aligned} Z_n+Z_{n-1}-2Z_{n-2}&=(Z_n-Z_{n-2})+(Z_{n-1}-Z_{n-2}) \ ...