2881099 / csredis

.NET Core or .NET Framework 4.0+ client for Redis and Redis Sentinel (2.8) and Cluster. Includes both synchronous and asynchronous clients.
MIT License
2.02k stars 414 forks source link

Connect to server timeout & Connection was not opened问题 #313

Open walt-liuzw opened 4 years ago

walt-liuzw commented 4 years ago

netcore2.1 引用csrediscore3.6.2版本

在性能压测的情况下,并发60,持续时间15min报错

redis异常:【r-bp153cb6bc443ba4pd.redis.rds.aliyuncs.com:6379/44】状态不可用,等待后台检查程序恢复方可使用。Connect to server timeout","DateTime":"2020-07-03T12:48:35.0764406+08:00","Level":"Critical","Command":null}
csreids 错误【r-bp153cb6bc443ba4pd.redis.rds.aliyuncs.com:6379/44】:Connection was not opened    at CSRedis.CSRedisClient.GetAndExecuteAsync[T](RedisClientPool pool, Func`2 handerAsync, Int32 jump, Int32 errtimes)

连接串: IP:6379,password=*****,defaultDatabase=1,testcluster=false,idleTimeout=15000,tryit=2,poolsize=300,preheat=1,syncTimeout=15000

2881099 commented 4 years ago

压测远程 redis-server 性能会处理不过来的。

而且压测前要先预热连接,preheat=100

walt-liuzw commented 4 years ago

压测远程 redis-server 性能会处理不过来的。

而且压测前要先预热连接,preheat=100

那生产上也是这样配置吗?因为压测就是模拟线上可能出现的并发请求

2881099 commented 4 years ago

是的,线上开预热,防止启动那瞬间忙不过来

walt-liuzw commented 4 years ago

是的,线上开预热,防止启动那瞬间忙不过来

能不能将连接串上的每个字段给出一般的最佳实践值? 现在我也有疑问 idleTimeout一般设置为15000 tryit设置为2 poolsize设置为300 preheat设置为100 syncTimeout设置为15000 这样的确可以解决问题,那会不会有其他的坑呢,所以这个串最佳实践是啥?每个字段受啥影响,一般设置为多少为最佳?

我么redis-server是共用阿里云实例的,如果我poolsize设置太大就会影响其他业务

2881099 commented 4 years ago

环境不同值也不同,没有最佳这一说,其实默认值就是你说的最佳,只不过适用局域网环境。

walt-liuzw commented 4 years ago

使用redis的串: defaultDatabase=34,testcluster=false,idleTimeout=15000,tryit=2,poolsize=500,preheat=10,syncTimeout=15000 报错: {【r-bp153cb6bc443ba4pd.redis.rds.aliyuncs.com:6379/34】仍然不可用,下一次恢复检查时间:08/03/2020 11:52:29,错误:(Connect to server timeout) Request starting HTTP/1.1 GET http://basic.uat.lunz.cn:80/health
Request finished in 31.7454ms 200 application/json 【r-bp153cb6bc443ba4pd.redis.rds.aliyuncs.com:6379/34】仍然不可用,下一次恢复检查时间:08/03/2020 11:52:39,错误:(Connect to server timeout) Request starting HTTP/1.1 GET http://basic.uat.lunz.cn:80/health
Request finished in 31.7156ms 200 application/json 【r-bp153cb6bc443ba4pd.redis.rds.aliyuncs.com:6379/34】仍然不可用,下一次恢复检查时间:08/03/2020 11:52:49,错误:(Connect to server timeout) Request starting HTTP/1.1 GET http://basic.uat.lunz.cn:80/health
Request finished in 32.1354ms 200 application/json 【r-bp153cb6bc443ba4pd.redis.rds.aliyuncs.com:6379/34】仍然不可用,下一次恢复检查时间:08/03/2020 11:52:59,错误:(Connect to server timeout) Request starting HTTP/1.1 GET http://basic.uat.lunz.cn:80/health
Request finished in 29.4972ms 200 application/json 【r-bp153cb6bc443ba4pd.redis.rds.aliyuncs.com:6379/34】仍然不可用,下一次恢复检查时间:08/03/2020 11:53:09,错误:(Connect to server timeout)

Request finished in 32.176ms 200 application/json 【r-bp153cb6bc443ba4pd.redis.rds.aliyuncs.com:6379/34】仍然不可用,下一次恢复检查时间:08/03/2020 11:53:19,错误:(Connect to server timeout) Request starting HTTP/1.1 GET http://basic.uat.lunz.cn:80/health
Request finished in 31.4303ms 200 application/json 【r-bp153cb6bc443ba4pd.redis.rds.aliyuncs.com:6379/34】仍然不可用,下一次恢复检查时间:08/03/2020 11:53:29,错误:(Connect to server timeout) Request starting HTTP/1.1 GET http://basic.uat.lunz.cn:80/health
Request finished in 31.2822ms 200 application/json 【r-bp153cb6bc443ba4pd.redis.rds.aliyuncs.com:6379/34】仍然不可用,下一次恢复检查时间:08/03/2020 11:53:39,错误:(Connect to server timeout) Request starting HTTP/1.1 GET http://basic.uat.lunz.cn:80/health
Request finished in 561.313ms 200 application/json 【r-bp153cb6bc443ba4pd.redis.rds.aliyuncs.com:6379/34】仍然不可用,下一次恢复检查时间:08/03/2020 11:53:49,错误:(Connect to server timeout)

【r-bp153cb6bc443ba4pd.redis.rds.aliyuncs.com:6379/34】已恢复工作

2881099 commented 4 years ago

Connect to server timeout

连接超时导航的错误,默认是5秒超时。

connectTimeout=5000

2881099 commented 4 years ago

r-bp153cb6bc443ba4pd.redis.rds.aliyuncs.com:6379

之前有测试过,阿里云这个地址,有时候 dns 解析超时慢。

walt-liuzw commented 4 years ago

好的,我后面继续监控

walt-liuzw commented 4 years ago

换成Ip后,现在timeout 的确少点了,但是

csreids 错误【xxxxxxxx:6379/34】:Connection was not opened    at CSRedis.CSRedisClient.GetAndExecuteAsync[T](RedisClientPool pool, Func`2 handerAsync, Int32 jump, Int32 errtimes)

这个错误还是有

willtoto commented 4 years ago

用阿里云的要注意监测流量 阿里云实例 内网也是有流量限制的,超过流量 系统就崩了 我碰到过

willtoto commented 4 years ago

环境不同值也不同,没有最佳这一说,其实默认值就是你说的最佳,只不过适用局域网环境。

我问一下 默认的preheat值是多少

2881099 commented 4 years ago

环境不同值也不同,没有最佳这一说,其实默认值就是你说的最佳,只不过适用局域网环境。

我问一下 默认的preheat值是多少

访问量不大,preheat=1 就行。

如果访问量大,那么 preheat=50 也不为过。

willtoto commented 4 years ago

环境不同值也不同,没有最佳这一说,其实默认值就是你说的最佳,只不过适用局域网环境。

我问一下 默认的preheat值是多少

访问量不大,preheat=1 就行。

如果访问量大,那么 preheat=50 也不为过。

我目前线上的连接串没有设置 preheat参数, 然后出现了Connection was not opened错误 我像知道下 连接串没指定的时候 这个参数值是多少 作为我更改的参考

weile0769 commented 3 years ago

我最近也是频繁出现 Connection was not opened 有解决方案吗 也是阿里云rds

willtoto commented 3 years ago

我最近也是频繁出现 Connection was not opened 有解决方案吗 也是阿里云rds

目前我们解决了 我微信zhimitec 你可以加我聊聊

LuceLuo commented 3 years ago

我最近也是频繁出现 Connection was not opened 有解决方案吗 也是阿里云rds

目前我们解决了 我微信zhimitec 你可以加我聊聊

拉个群聊吧,出现这个问题的太多了

jsonzhuwei commented 3 years ago

@willtoto 这个问题解决了吗,有没有群

ajdwfnhaps commented 3 years ago

咋解决的,大佬们,我也想解决 @willtoto

xinboo commented 2 years ago

我也碰到了同样的问题,频繁redis错误:Connection was not opened at CSRedis.CSRedisClient.GetAndExecuteAsync[T](RedisClientPool pool, Func`2 handerAsync, Int32 jump, Int32 errtimes)求解!!!

netkey commented 2 years ago

redis集群模式运行,报告csreids 错误【172.21.xx.xxx:6379/0】:Connection was not opened at CSRedis.CSRedisClient.GetAndExecuteAsync[T](RedisClientPool pool, Func`2 handerAsync, Int32 jump, Int32 errtimes)

wf504071976 commented 1 year ago

这个问题有完全解决的吗?

2881099 commented 1 year ago

这个问题有完全解决的吗?

看上面回复,和处理速度有关