【Azure Redis 缓存】Azure Redis读写比较慢/卡的问题排查
问题描述
在使用Azure Redis的过程中发现读写比较慢,非常卡,执行扩容6-->13GB后,过一段时间也满了。在通过门户Console连接到Reids,通过info Memory名称查看到User_memory_peak_perc指标达到99%以上,怀疑是不是该值的使用导致了Redis读写慢的问题呢?

问题根源
used_memory_peak_perc: 该值表示的是使用内存达到峰值内存的百分比。它的计算方式为:(used_memory/ used_memory_peak) * 100%,即当前redis使用内存/历史使用记录中redis使用内存峰值*100%。而used_memory_peak,表示的是redis的内存消耗峰值(以字节为单位),即历史使用记录中redis使用内存最高峰值。
所以used_memory_peak_perc指数高并不能判断当前Redis的内容使用量。而如果需要判断内存是否使用完,还是需要使用最基本的规则:MaxMemory 与 Used_Memory进行大小比较
在Redis的使用中,另一个导致慢的关键点是执行一些时间复杂度为O(N)的指令,如KEYS, HGETALL等,可以执行slowlog来查看Redis执行的慢查询日志。
- KEYS:Returns all keys matching
pattern. While the time complexity for this operation is O(N), the constant times are fairly low. HGETALL命令,而该命令的时间复杂度是O(N) , 这意味着Hash的field越多,当使用HgetAll获取全量数据时,性能越差,该命令的性能与field字段的数量成正比。如果频繁使用,是非常耗时的。
解决办法
升级Redis的内存空间,及设置合理的maxmemory-policy(逐出机制)。当redis内存数据达到maxmemory时,会根据maxmemory-policy配置来淘汰内存数据,以避免内存溢出(OOM: Out of Memory)。redis提供了以下8种淘汰策略:
- volatile-lru :通过尝试先删除最近不使用的(LRU)密钥来移出密钥,但只有在已设置过期的密钥中才能移出这些密钥,以便为添加的新数据腾出空间。如果查找不到数据,则回退到noeviction。
- allkeys-lru:通过尝试先删除最近不使用的(LRU)键来移出键(所有数据范围),以便为添加的新数据腾出空间。
- volatile-random:为添加新的键腾出空间,随机逐出其他键,但是仅逐出设置了过期时间的键。
- allkeys-random:随机逐出其他键,以便为添加新的键腾出空间(所有数据范围)。
- volatile-ttl:逐出设置过期的密钥,并尝试首先逐出具有较短生存时间(TTL)的密钥,以便为添加新的键腾出空间。
- noeviction:执行任何淘汰策略。当达到内存限制并且客户端尝试执行可能导致使用更多内存的命令时,将返回错误(大多数写入命令,但DEL和一些其他例外)。
- volatile-lfu:使用设置过期并且使用频率最少的键(LFU)中进行驱逐。
- allkeys-lfu:使用频率最少的键(LFU)逐出任何密钥。
参考资料
Redis Commands reference: https://redis.io/commands/
【Azure Redis 缓存】Azure Redis读写比较慢/卡的问题排查的更多相关文章
- 【Azure Redis 缓存 Azure Cache For Redis】Azure Redis由低级别(C)升级到高级别(P)的步骤和注意事项, 及对用户现有应用的潜在影响,是否需要停机时间窗口,以及这个时间窗口需要多少的预估问题
问题描述 由于Azure Redis的性能在不同级别表现不同,当需要升级/缩放Redis的时候,从使用者的角度,需要知道有那些步骤? 注意事项? 潜在影响?停机事件窗口? 升级预估时间? 解决方案 从 ...
- 【Azure Redis 缓存 Azure Cache For Redis】如何设置让Azure Redis中的RDB文件暂留更久(如7天)
问题描述 Azure Redis和所有的Redis服务一样,可以让你保留存储在Redis中的数据.以防万一在Redis服务器出现故障的时候能尽可能小的减少数据的损失.在Azure Redis服务中,默 ...
- 【Azure Redis 缓存 Azure Cache For Redis】Redis性能问题,发现Server Load非常的高,导致正常连接/操作不成功
问题描述 在正常使用Azure Redis的服务中,突然发现Redis 的CPU达到了100%, 正常的使用中发现性能问题严重.从Redis的门户图表中,观察到CPU, Connection,Lent ...
- 【Azure Redis 缓存 Azure Cache For Redis】在创建高级层Redis(P1)集成虚拟网络(VNET)后,如何测试VNET中资源如何成功访问及配置白名单的效果
当使用Azure Redis高级版时候,为了能更好的保护Redis的安全,启用了虚拟网路,把Redis集成在Azure中的虚拟网络,只能通过虚拟网络VENT中的资源进行访问,而公网是不可以访问的.但是 ...
- 【Azure Redis 缓存 Azure Cache For Redis】使用Redis自带redis-benchmark.exe命令测试Azure Redis的性能
问题描述 关于Azure Redis的性能问题,在官方文档中,可以查看到不同层级Redis的最大连接数,每秒处理请求的性能. 基本缓存和标准缓存 C0 (250 MB) 缓存 - 最多支持 256 个 ...
- 【Azure Redis 缓存 Azure Cache For Redis】Redis连接池
问题描述 Redis根据定价层说明,不同级别支持的连接数最多可达4万(同时),但是当短时间又大量连接请求建立的时候,Redis服务的服务压力非常大,到达100%.严重影响了高响应的要求.最严重时,经常 ...
- 【Azure Redis 缓存 Azure Cache For Redis】Redis出现 java.net.SocketTimeoutException: Read timed out 异常
问题描述 在使用Azure Redis时,遇见Read Timed out异常, Redis的客户端使用的时jedis.问题发生时,执行redis部分指令出错,大部分get指令,set指令能正常执行. ...
- 【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 ...
- Azure Redis 缓存使用注意事项与排查问题文档整理
StackExchange.Redis 使用名为 synctimeout 的配置设置进行同步操作,该设置的默认值为 1000 毫秒. 如果同步调用未在规定时间内完成,StackExchange.Red ...
- [转]在nodejs使用Redis缓存和查询数据及Session持久化(Express)
本文转自:https://blog.csdn.net/wellway/article/details/76176760 在之前的这篇文章 在ExpressJS(NodeJS)中设置二级域名跨域共享Co ...
随机推荐
- [转贴]一图弄懂ASCII、GB2312、GBK、GB18030编码
一图弄懂ASCII.GB2312.GBK.GB18030编码 https://blog.csdn.net/LightUpHeaven/article/details/92008630 转载君子不器. ...
- 通过mat获取OOM时对象信息的方法与过程
通过mat获取OOM时对象信息的方法与过程 背景 如果谁的耐心不好, 就让他去看MAT里的objects信息. 有项目出现了OOM的情况 我在公司这边有一台内存比较高的Win10机器. 然后帮助同事进 ...
- ESXi6.7安装Win11的方法
背景 公司里面要进行新的操作系统验证了. 之前Win10 Win7 Win8 都比较简单. 就是现在Win11有了TPM非常繁琐. 今天必须得搞一把了,就简单搜索了下. 发现还是可以解决的. 然后记录 ...
- Kernel 内核支持的方法查询
今天同事说自己的一个项目出现了报错如图: 报错的机器是 Windows XP 想找一个 windows XP的机器验证一下: 然后 想通过百度搜索确认一下 这个问题 但是发现基本上效果不大 改用了bi ...
- ESXi 虚拟机性能情况简单验证
1.虚拟化的CPU超售问题. 经过查找资料, 发现 ESXi 5.5 的版本 一个 物理CPU的Core 可以虚拟出 25个vCPU, 升级到ESXi6.0 之后可以虚拟化32个vCPU. 所以虚拟化 ...
- Spring Cloud 系列:基于Seata 实现 XA模式
https://seata.io/zh-cn/docs/user/mode/xa https://seata.io/zh-cn/docs/dev/mode/xa-mode XA 规范 是 X/Open ...
- 测试角色在项目各阶段的项目管理tips
作者:京东物流 宋雪薇 1 前言 项目管理是一个繁杂的过程,每个阶段需要涉及到不同人员.资源的协调配合.每个角色都有自己的定位和任务,为了紧密配合项目经理或无分配项目经理运行项目的场景下确保项目成员共 ...
- 手写promise完成异常处理和状态只能够修改一次
8.处理 Promise 抛出的异常 <script src="./Promise.js"></script> <script type=" ...
- elementui表格内容超出显示省略号
有些时候表格的内容太长了: 但是elementui中的表格,会进行换行处理: 此时表格的高度就会发生变化 这样就不好看,此时就要进行省略号来出来这个问题: el-table是有这个控制属性的::sho ...
- 20.4 OpenSSL 套接字AES加密传输
在读者了解了加密算法的具体使用流程后,那么我们就可以使用这些加密算法对网络中的数据包进行加密处理,加密算法此处我们先采用AES算法,在网络通信中,只需要在发送数据之前对特定字符串进行加密处理,而在接收 ...