CNode

ioredis访问redis集群超时

问答
Zzhaozhi1989发布于10 年前最后回复8 年前12 回复5060 浏览0 收藏

在高并发压力测试下ioredis访问redis集群在同一秒中有多个超时80毫秒以上的,请问专家门知道是什么问题吗? 并发测试数据有: 50并发,大于80毫秒的超时数有72次。 100并发,大于80毫秒的超时数有202次。

硬件配置:4核16G ,2台虚拟机

查看回复

回复 (12)

J
jiangzhuo#1·10 年前

各个机器的metric看看有没有问题 看各端的耗时统计信息,确定问题出在client端还是redis端还是出在网络上 redis出问题找运维改配置,网络出问题找运维修网络 client出问题的话你再具体看在哪一步等待了。

I
i5ting#2·10 年前

问题再具体描述一下,可以请作者 @luinlee 大神帮忙看看

Z
zhaozhi1989#3·10 年前
引用 jiangzhuo各个机器的metric看看有没有问题 看各端的耗时统计信息,确定问题出在client端还是redis端还是出在网络上 redis出问题找运维改配置,网络出问题找运维修网络 client出问题的...

@jiangzhuo redis找公司的DBA看过,都没有发现超时50毫秒以上的。 从nodejs服务器ping redis服务器网络耗时基本都在2毫秒以内。 client端我将逻辑全部去掉,只是通过ioredis包查询redis集群就有造成同一秒超时80毫秒以上的情况,且最大耗时已达到800毫秒。

另外metric这个怎么用?不太理解,还请详解下,谢谢!

Z
zhaozhi1989#4·10 年前
引用 i5ting问题再具体描述一下,可以请作者 @luinlee 大神帮忙看看

@i5ting 我在github上提的问题luinlee大神有解答过,但是也没解决他说的情况能降低超时数。

J
jiangzhuo#6·10 年前
引用 zhaozhi1989@jiangzhuo redis找公司的DBA看过,都没有发现超时50毫秒以上的。 从nodejs服务器ping redis服务器网络耗时基本都在2毫秒以内。 client端我将逻辑全部去掉,...

@zhaozhi1989 metric指的是看看机器CPU 进程内存 IO等待什么的有没有一场,最好还能你能给个能复现你问题的代码段,顺便贴一下你的ioredis版本和node版本

J
jiangzhuo#7·10 年前
引用 zhaozhi1989@jiangzhuo redis找公司的DBA看过,都没有发现超时50毫秒以上的。 从nodejs服务器ping redis服务器网络耗时基本都在2毫秒以内。 client端我将逻辑全部去掉,...

@zhaozhi1989 翻了一下你在ioredis下的issue,你说的50个并发是单个node进程里的?node默认只开四个工作线程,超过四个第五个就会等待,而且看你用了hiredis,你试试UV_THREADPOOL_SIZE=120 node xxx.js 修改工作线程数试试

Z
zhaozhi1989#8·10 年前
引用 jiangzhuo@zhaozhi1989 你贴一段能复现你问题的最简单代码出来,我们好具体讨论

@jiangzhuo var Redis = require('ioredis'); var redisClient = {}; redisClient.getRedisClient = function(callback){ var cluster = new Redis.Cluster([ {port:1234,host:'127.0.0.1'}, {port:1235,host:'127.0.0.1'} ],{ redisOptions:{password:'password'} }); return cluster; } module.exports = redisClient;

Z
zhaozhi1989#9·10 年前
Z
zheng199512#12·8 年前

请问一下ioredis是否有检测集群机器宕机的功能呢?

参与回复
登录后即可参与回复。登录