记一次Redis超时排查

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 转载请注明出处哈:http://carlosfu.iteye.com/blog/2240426    一、问题:       1. 应用端使用了我们提供的一个redis-sentinel集群(1主,1从,3个sentinel)     2. 客户端设置了超时时间为200ms, 下面是应用端提供的超时日志。

转载请注明出处哈:http://carlosfu.iteye.com/blog/2240426


 

 一、问题:

 

    1. 应用端使用了我们提供的一个redis-sentinel集群(1主,1从,3个sentinel)

    2. 客户端设置了超时时间为200ms, 下面是应用端提供的超时日志。注意上图对象数只有265个。

2016-02-03 14:20:42,981 [DubboServerHandler-10.16.xx.xx:20880-thread-51] WARN  com.xx.DramaTabRelatePgcComponentImpl$1 (DataComponentCommand.java:76) - commandKey=drama_tab_pgc groupKey=drama_tab_pgc_pool poolKey=drama_tab_pgc_pool timeout cost=201 ms
...................
2016-02-03 14:20:40,168 [DubboServerHandler-10.16.xx.xx:20880-thread-9] WARN  com.xx.DramaTabRelatePgcComponentImpl$1 (DataComponentCommand.java:76) - commandKey=drama_tab_pgc groupKey=drama_tab_pgc_pool poolKey=drama_tab_pgc_pool timeout cost=200 ms
2016-02-03 09:56:14,174 [DubboServerHandler-10.16.xx.xx:20880-thread-146] WARN  com.xx.DramaTabRelatePgcComponentImpl$1 (DataComponentCommand.java:76) - commandKey=drama_tab_pgc groupKey=drama_tab_pgc_pool poolKey=drama_tab_pgc_pool timeout cost=200 ms
.....................
2016-02-03 12:32:03,575 [DubboServerHandler-10.16.xx.xx:20880-thread-125] WARN  com.xx.DramaTabRelatePgcComponentImpl$1 (DataComponentCommand.java:76) - commandKey=drama_tab_pgc groupKey=drama_tab_pgc_pool poolKey=drama_tab_pgc_pool timeout cost=200 ms

   

二、逐个排查:

 

1. Redis慢查询:并没有发现慢查询,跳过

 

 

2. Redis日志:对象数只有265个,注意从2016年1月25后就没日志了,所以并没有什么异常,也没什么RDB和AOF重写。跳过

 

 

3. 机器:tsar观察cpu,内存,网络,负载,本地IO

cpu、内存、负载、本地IO比较正常。

唯一以前怀疑的是网络,按理说这个流量也不是很大,但是看了一下机房的拓扑关系以及redis-cli的测试就了解原因了,下一节进行简单分析。

 

 

 

三、怀疑并确认:

 

1. 应用端与服务器网络:

      

 

2. redis-cli

    redis-cli是个比较好的方法来测redis的延迟,为此我们用下面的api来测试,发现会出现200ms的情况。

    具体原因猜测:机房之间的带宽有限,据说只有50M,这台机器本身流量就有点大而且是台虚机。

     

redis-cli --latency-history -h ip -p port

 

[@zw-34-55 ~]# redis-cli --latency-history -h 10.11.132.xx -p 6388
min: 0, max: 1, avg: 0.48 (1290 samples) -- 15.01 seconds range
min: 0, max: 1, avg: 0.87 (1264 samples) -- 15.00 seconds range
min: 0, max: 1, avg: 0.60 (1275 samples) -- 15.01 seconds range
min: 0, max: 202, avg: 0.69 (1265 samples) -- 15.00 seconds range
min: 0, max: 202, avg: 0.81 (1271 samples) -- 15.01 seconds range
min: 0, max: 1, avg: 0.79 (1254 samples) -- 15.01 seconds range
min: 0, max: 1, avg: 0.52 (1283 samples) -- 15.00 seconds range
min: 0, max: 1, avg: 0.50 (1288 samples) -- 15.01 seconds range
min: 0, max: 1, avg: 0.89 (1260 samples) -- 15.01 seconds range
min: 0, max: 1, avg: 0.57 (1277 samples) -- 15.01 seconds range
min: 0, max: 1, avg: 0.52 (1284 samples) -- 15.00 seconds range
min: 0, max: 1, avg: 0.69 (1284 samples) -- 15.01 seconds range
min: 0, max: 1, avg: 0.76 (1256 samples) -- 15.00 seconds range
min: 0, max: 1, avg: 0.48 (1300 samples) -- 15.01 seconds range
min: 0, max: 1, avg: 0.55 (1297 samples) -- 15.01 seconds range
min: 0, max: 1, avg: 0.89 (1257 samples) -- 15.01 seconds range
min: 0, max: 202, avg: 0.68 (1277 samples) -- 15.01 seconds range
min: 0, max: 1, avg: 0.52 (1296 samples) -- 15.01 seconds range
min: 0, max: 1, avg: 0.74 (1278 samples) -- 15.00 seconds range
min: 0, max: 1, avg: 0.73 (1271 samples) -- 15.00 seconds rang

     

 

 

 

四、解决和观察:

 

    1. 思路:写入端是后台管理系统,流量较小,读端流量较大,为此让master改为电信机房。

    2. 解决方法:(1) 添加一个电信的slave (2) 下线老的联通slave (3) 主从做sentinel failover

    3. 总结:查询超时的基本思路 +  分配机器要考虑流量的合理性。

 

五、参考文献:

 

  1. Redis latency problems troubleshooting
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
7月前
|
缓存 监控 NoSQL
【Redis性能瓶颈揭秘】「调优系列」深入分析热Key的排查策略和解决方案
【Redis性能瓶颈揭秘】「调优系列」深入分析热Key的排查策略和解决方案
215685 12
|
7月前
|
运维 NoSQL 算法
【Redis故障排查】「连接失败问题排查和解决」带你深入分析一下Redis阻塞原因以及问题排查方案指南
【Redis故障排查】「连接失败问题排查和解决」带你深入分析一下Redis阻塞原因以及问题排查方案指南
1077 0
|
7月前
|
缓存 运维 NoSQL
【Redis故障排查】「连接失败问题排查和解决」带你总体分析和整理Redis的问题故障实战开发指南及方案
【Redis故障排查】「连接失败问题排查和解决」带你总体分析和整理Redis的问题故障实战开发指南及方案
1281 0
|
2月前
|
NoSQL Java API
美团面试:Redis锁如何续期?Redis锁超时,任务没完怎么办?
在40岁老架构师尼恩的读者交流群中,近期有小伙伴在面试一线互联网企业时遇到了关于Redis分布式锁过期及自动续期的问题。尼恩对此进行了系统化的梳理,介绍了两种核心解决方案:一是通过增加版本号实现乐观锁,二是利用watch dog自动续期机制。后者通过后台线程定期检查锁的状态并在必要时延长锁的过期时间,确保锁不会因超时而意外释放。尼恩还分享了详细的代码实现和原理分析,帮助读者深入理解并掌握这些技术点,以便在面试中自信应对相关问题。更多技术细节和面试准备资料可在尼恩的技术文章和《尼恩Java面试宝典》中获取。
美团面试:Redis锁如何续期?Redis锁超时,任务没完怎么办?
|
4月前
|
NoSQL 网络协议 Linux
【Azure Redis】Lettuce客户端遇见连接Azure Redis长达15分钟的超时
【Azure Redis】Lettuce客户端遇见连接Azure Redis长达15分钟的超时
|
4月前
|
NoSQL 网络协议 Linux
【Azure Redis】Redis客户端出现15分钟的超时异常
【Azure Redis】Redis客户端出现15分钟的超时异常
|
4月前
|
缓存 NoSQL Linux
【Azure Redis 缓存】应用中出现连接Redis服务错误(production.ERROR: Connection refused)的排查步骤
【Azure Redis 缓存】应用中出现连接Redis服务错误(production.ERROR: Connection refused)的排查步骤
|
4月前
|
缓存 监控 NoSQL
【Azure Redis 缓存】Azure Redis出现了超时问题后,记录一步一步的排查出异常的客户端连接和所执行命令的步骤
【Azure Redis 缓存】Azure Redis出现了超时问题后,记录一步一步的排查出异常的客户端连接和所执行命令的步骤
|
4月前
|
缓存 NoSQL 网络安全
【Azure Redis 缓存】Redis连接无法建立问题的排查(注:Azure Redis集成在VNET中)
【Azure Redis 缓存】Redis连接无法建立问题的排查(注:Azure Redis集成在VNET中)
|
4月前
|
缓存 NoSQL Redis
【Azure Redis 缓存】Azure Redis读写比较慢/卡的问题排查
【Azure Redis 缓存】Azure Redis读写比较慢/卡的问题排查