2881099 / FreeRedis

🦄 FreeRedis is .NET40+ redis client. supports cluster, sentinel, master-slave, pub-sub, lua, pipeline, transaction, streams, client-side-caching, and pooling.
MIT License
911 stars 160 forks source link

Next recovery time #146

Open wang1163619 opened 1 year ago

wang1163619 commented 1 year ago

最近redis 有大量的 【112.20.140.111:2255/0】Next recovery time: 05/20/2023 15:14:41 (Connect to redis-server(112.20.140.111:2255) timeout) 【112.20.140.111:2255/0】Next recovery time: 05/20/2023 15:15:06 (Connect to redis-server(112.20.140.111:2255) timeout) 【112.20.140.111:2255/0】Next recovery time: 05/20/2023 15:15:31 (Connect to redis-server(112.20.140.111:2255) timeout) 【112.20.140.111:2255/0】Next recovery time: 05/20/2023 15:14:56 (Connect to redis-server(112.20.140.111:2255) timeout) ......................

wang1163619 commented 1 year ago

之前一直使用freeredis,总体感觉来说挺好用的, 但是最近当前网络请求差不多20k pps时候,就会出现大量的timeout。 了解到:ObjectPool.Get 获取超时(10秒)应该从哪个方向去找问题? #134 我们做了很多尝试,修改连接池 min pool =5 max pool =800 min pool =10 max pool=100 min pool =30 max pool =100 ....... 问题依旧。

wang1163619 commented 1 year ago

部署环境: redis 服务器是阿里云 16核心32G 网关服务器也是阿里云 16核心32G 网关用的是ocelot, docker容器化部署。 当前请求量大一点时候,网关容器就会出现上面redis timeout 错误。

2881099 commented 1 year ago

方向一

访问量这么大的情况下,会不会触发服务器防火墙,盾之类的策略?

Connect to redis-server(112.20.140.111:2255) timeout,是在几秒内无法连接到 redis-server 的反馈,只是 socket.Connect 没有过多其他逻辑。

你可以单独写个测试程序, 并发 new Socket() Connect redis-server 看看结果。

方向二

redis-server 是否提供域名进行的访问,如果 FreeRedis 配置使用域名,那么最终解析到的 IP 有可能发生变化。

阿里云域名指向会发生变化,导致 FreeRedis 仍然在连接老的 IP。

wang1163619 commented 1 year ago

没有使用域名,都是通过ip加端口号访问的

wang1163619 commented 1 year ago

也没有触发服务器防火墙,盾之类的,因为,有4个网关docker实列,当一个网关docker容器超时,其它2个或者3个没有超时异常。

wang1163619 commented 1 year ago

我们还想问一下,我们这个访问量还适合继续使用freeredis吗?

2881099 commented 1 year ago

没有什么合不合适的,错误提示网络连接超时。遇到这种情况,分析并记录额外的情况。例如,发生错误时,自己编写socket open尝试连接Redis sever,并记录到日志是否成功。以及用socket连接其他服务器是否成功。

wang1163619 commented 1 year ago

那就是说,这里得超时跟freeredis没有关系,可能跟其它原因有关系,比如网络中断等原因有关,是吧。

2881099 commented 1 year ago

是的,FreeSql 没有特别操作,最终也是 socket connect

wang1163619 commented 1 year ago

我们采用的是异步调用,流量大的时候导致程序拒绝服务,所以一直报Next recovery time,暂时还没有时间dump,来证实这个问题。

wang1163619 commented 1 year ago

await redis.GetAsync()

xiaolei000129 commented 1 year ago

解决了吗?

tuana2k38 commented 1 year ago

Hi wang1163619! Have you resolved your issue?