博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
记一次Redis超时排查
阅读量:6272 次
发布时间:2019-06-22

本文共 3055 字,大约阅读时间需要 10 分钟。

转载请注明出处哈:


 

 一、问题:

 

    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 ms2016-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 6388min: 0, max: 1, avg: 0.48 (1290 samples) -- 15.01 seconds rangemin: 0, max: 1, avg: 0.87 (1264 samples) -- 15.00 seconds rangemin: 0, max: 1, avg: 0.60 (1275 samples) -- 15.01 seconds rangemin: 0, max: 202, avg: 0.69 (1265 samples) -- 15.00 seconds rangemin: 0, max: 202, avg: 0.81 (1271 samples) -- 15.01 seconds rangemin: 0, max: 1, avg: 0.79 (1254 samples) -- 15.01 seconds rangemin: 0, max: 1, avg: 0.52 (1283 samples) -- 15.00 seconds rangemin: 0, max: 1, avg: 0.50 (1288 samples) -- 15.01 seconds rangemin: 0, max: 1, avg: 0.89 (1260 samples) -- 15.01 seconds rangemin: 0, max: 1, avg: 0.57 (1277 samples) -- 15.01 seconds rangemin: 0, max: 1, avg: 0.52 (1284 samples) -- 15.00 seconds rangemin: 0, max: 1, avg: 0.69 (1284 samples) -- 15.01 seconds rangemin: 0, max: 1, avg: 0.76 (1256 samples) -- 15.00 seconds rangemin: 0, max: 1, avg: 0.48 (1300 samples) -- 15.01 seconds rangemin: 0, max: 1, avg: 0.55 (1297 samples) -- 15.01 seconds rangemin: 0, max: 1, avg: 0.89 (1257 samples) -- 15.01 seconds rangemin: 0, max: 202, avg: 0.68 (1277 samples) -- 15.01 seconds rangemin: 0, max: 1, avg: 0.52 (1296 samples) -- 15.01 seconds rangemin: 0, max: 1, avg: 0.74 (1278 samples) -- 15.00 seconds rangemin: 0, max: 1, avg: 0.73 (1271 samples) -- 15.00 seconds rang

     

 

 

 

四、解决和观察:

 

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

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

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

 

五、参考文献:

 

你可能感兴趣的文章
Android MPAndroidChart:动态添加统计数据线【8】
查看>>
第五届全球游戏开发者大会暨天府奖盛典18日盛大开幕
查看>>
融了1000万,只为让它们好好吃饭!
查看>>
Debian 项目领导人职位已有三位侯选者
查看>>
阿里巴巴与三个知名车企达成合作,将为其“AI+车”解决方案
查看>>
django小项目:搭建简易火车车票预订系统
查看>>
仅研发就投入3300人 华为如何掘金物联网?
查看>>
表单调试工具推荐
查看>>
Kubernetes node的防火墙问题导致pod ip无法访问
查看>>
hdfs-site.xml配置
查看>>
为什么多线程读写 shared_ptr 要加锁?
查看>>
netware 6.5的故障解决
查看>>
linux 同步IO: sync、fsync与fdatasync
查看>>
笼络人才,再三“表白”,库克表示苹果更看重AR
查看>>
[原创]对于运行ASP.NET程序时,提示:无法启动程序“http://localhost:3532/Default.aspx”。的疑问...
查看>>
潮鞋的AR初体验,鬼冢虎和Anrealage合作新鞋
查看>>
4星|《错误的行为》:经济行为中大部分时候人们是不理性的
查看>>
java中包容易出现的错误及权限问题
查看>>
Hibernate5-查询与排序
查看>>
硬盘速度测试
查看>>