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. 境内下载nodejs二进制文件

    下载 nodejs 安装包的方法 找到一个境内的淘宝源 可以直接使用 下载速度还比较快 但是没有 龙芯的.. http://npm.taobao.org/mirrors/node/v10.20.0/

  2. GitHub要求2FA?不慌,有它们帮你

    近日,GitHub宣布,到 2023 年底,所有用户都必须要启用双因素身份验证 (2FA),不能只用密码啦. 正如GitHub的首席安全官Mike Hanley所指出的那样,保护开发者账号是确保软件供 ...

  3. 从零开始配置vim(31)——git 配置

    很抱歉又拖更了这么久了,在这个新公司我想快速度过试用期,所以大部分的精力主要花在日常工作上面.但是这个系列还是得更新下去,平时只能抽有限的业余时间来准备.这就导致我写这些文章就慢了一些. 废话不多说, ...

  4. 设计模式学习-使用go实现命令模式

    命令模式 定义 优点 缺点 适用范围 代码实现 命令模式对比策略模式 参考 命令模式 定义 命令模式(Command):将一个请求封装成一个对象,从而是你可用不同的的请求对客户进行参数化:对请求排队或 ...

  5. PE格式:新建节并插入代码

    经过了前一章的学习相信你已经能够独立完成FOA与VA之间的互转了,接下来我们将实现在程序中插入新节区,并向新节区内插入一段能够反向连接的ShellCode代码,并保证插入后门的程序依旧能够正常运行不被 ...

  6. Leetcode刷题第六天-回溯

    131:分割回文串 链接:131. 分割回文串 - 力扣(LeetCode) for 遍历字符串 递归切割,切割到字符串尾,单次结束 1 class Solution: 2 def partition ...

  7. 深入浅出Java多线程(七):重排序与Happens-Before

    引言 大家好,我是你们的老伙计秀才!今天带来的是[深入浅出Java多线程]系列的第七篇内容:重排序与Happens-Before.大家觉得有用请点赞,喜欢请关注!秀才在此谢过大家了!!! 在上一篇文章 ...

  8. DELPHI IDE 代码智能提示

  9. HBase相关面试题汇总

    1.HBase是什么? (1) HBase一个分布式的基于列式存储的数据库,基于Hadoop的hdfs存储,zookeeper进行管理. (2) HBase适合存储半结构化或非结构化数据,对于数据结构 ...

  10. 精通C语言:打造高效便捷的通讯录管理系统

    欢迎大家来到贝蒂大讲堂 养成好习惯,先赞后看哦~ 所属专栏:C语言项目 贝蒂的主页:Betty's blog 引言: 在我们大致学习完C语言之后,我们就可以利用目前所学的知识去做一些有意思的项目,而今 ...