在高并发压力测试下ioredis访问redis集群在同一秒中有多个超时80毫秒以上的,请问专家门知道是什么问题吗? 并发测试数据有: 50并发,大于80毫秒的超时数有72次。 100并发,大于80毫秒的超时数有202次。
硬件配置:4核16G ,2台虚拟机
各个机器的metric看看有没有问题 看各端的耗时统计信息,确定问题出在client端还是redis端还是出在网络上 redis出问题找运维改配置,网络出问题找运维修网络 client出问题的话你再具体看在哪一步等待了。
问题再具体描述一下,可以请作者 @luinlee 大神帮忙看看
@jiangzhuo redis找公司的DBA看过,都没有发现超时50毫秒以上的。 从nodejs服务器ping redis服务器网络耗时基本都在2毫秒以内。 client端我将逻辑全部去掉,只是通过ioredis包查询redis集群就有造成同一秒超时80毫秒以上的情况,且最大耗时已达到800毫秒。
另外metric这个怎么用?不太理解,还请详解下,谢谢!
@i5ting 我在github上提的问题luinlee大神有解答过,但是也没解决他说的情况能降低超时数。
@zhaozhi1989 你贴一段能复现你问题的最简单代码出来,我们好具体讨论
@zhaozhi1989 metric指的是看看机器CPU 进程内存 IO等待什么的有没有一场,最好还能你能给个能复现你问题的代码段,顺便贴一下你的ioredis版本和node版本
@zhaozhi1989 翻了一下你在ioredis下的issue,你说的50个并发是单个node进程里的?node默认只开四个工作线程,超过四个第五个就会等待,而且看你用了hiredis,你试试UV_THREADPOOL_SIZE=120 node xxx.js
修改工作线程数试试
@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;
@jiangzhuo cpu我这边都看过,30%的样子,内存基本上没什么消耗。 ioredis版本:2.4.0 node版本:6.6.0
@jiangzhuo 我用的框架是express.js,请问这个框架怎么开线程数。
@jiangzhuo 目前我这边开的进程数是根据服务器的核数开的。
请问一下ioredis是否有检测集群机器宕机的功能呢?