Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

状态不可用,等待后台检查程序恢复方可使用 #476

Open
ZUOXIANGE opened this issue Apr 25, 2023 · 26 comments
Open

状态不可用,等待后台检查程序恢复方可使用 #476

ZUOXIANGE opened this issue Apr 25, 2023 · 26 comments

Comments

@ZUOXIANGE
Copy link

ZUOXIANGE commented Apr 25, 2023

近期我们生产环境出现这个错误的频率很高.Redis是购买的阿里云8GB主从版,QPS在500左右,高峰能到1000.查询以往的issue之后修改链接字符串如下,但是情况没有得到改善.还有什么我能尝试的方法吗?

redis.rds.aliyuncs.com:6379,password=123456,defaultDatabase=0,autoDispose=false,poolsize=200,idleTimeout=200000,testcluster=false,tryit=3

还有这个错误也是一起发生的

Connection was not opened CSRedis.RedisClientException: Connection was not opened at CSRedis.CSRedisClient.GetAndExecuteAsync[T](RedisClientPool pool, Func2 handerAsync, Int32 jump, Int32 errtimes) at CSRedis.CSRedisClient.ExecuteScalarAsync[T](String key, Func3 handerAsync) at CSRedis.CSRedisClient.CacheShellAsync[T](String key, Int32 timeoutSeconds, Func`1 getDataAsync)

@2881099
Copy link
Owner

2881099 commented Apr 25, 2023

不是局域网防火墙有限制

或者 域名ip已发生变化

@ZUOXIANGE
Copy link
Author

已经联系阿里云排查过网络问题,没有这方面的限制

@2881099
Copy link
Owner

2881099 commented Apr 26, 2023

可以自行做一个压力测试,错误确实是 socket 未连接导致。

@ZUOXIANGE
Copy link
Author

可能的报错场景是什么呢?我自行模拟的QPS1000的场景不能复现这个,生产环境把连接池改小为20以下就极大程度缓解了这个问题,有什么可能的原因吗

@2881099
Copy link
Owner

2881099 commented Apr 29, 2023

模拟环境,必须网络也一样,不要测试本地。

@2881099
Copy link
Owner

2881099 commented Apr 29, 2023

我的意思很明白,网诺问题,上面给你分析了,

模拟只是让你论证。

@ZUOXIANGE
Copy link
Author

就是发布到服务器测试的

@xiaolei000129
Copy link

我也约到这个问题了,你们解决了吗?

@xiaolei000129
Copy link

换成freeRdis 是否能够解决这个问题

@ZUOXIANGE
Copy link
Author

我也约到这个问题了,你们解决了吗?

暂时通过把连接池改小缓解了

@ZUOXIANGE
Copy link
Author

换成freeRdis 是否能够解决这个问题

正在切换到StackExchange.Redis

@xiaolei000129
Copy link

换成freeRdis 是否能够解决这个问题

正在切换到StackExchange.Redis

测试结果可以和我同步一下吗?我目前也很需要

@xiaolei000129
Copy link

换成freeRdis 是否能够解决这个问题

正在切换到StackExchange.Redis
为什么改小,不是改大更好吗?

@ZUOXIANGE
Copy link
Author

换成freeRdis 是否能够解决这个问题

正在切换到StackExchange.Redis
为什么改小,不是改大更好吗?

我也不是很清楚,但是这样改暂时有用.换用StackExchange.Redis的接口暂时还没有出现报错

@xiaolei000129
Copy link

换成freeRdis 是否能够解决这个问题

正在切换到StackExchange.Redis
为什么改小,不是改大更好吗?

我也不是很清楚,但是这样改暂时有用.换用StackExchange.Redis的接口暂时还没有出现报错

好的谢谢,我也之能切换了,现在影响到业务了

@xiaolei000129
Copy link

确定切换之后运行的环境和之前出问题的环境一致把,因为切换还是挺需要时间的

@xiaolei000129
Copy link

换成freeRdis 是否能够解决这个问题

正在切换到StackExchange.Redis
为什么改小,不是改大更好吗?

我也不是很清楚,但是这样改暂时有用.换用StackExchange.Redis的接口暂时还没有出现报错

你们现在使用的怎么样了,我目前还是不行

@xiaolei000129
Copy link

切换了库也超时

@ZUOXIANGE
Copy link
Author

那可能不是一个原因,我说的方法只针对我的情况有用

@xwb2535
Copy link

xwb2535 commented Jul 6, 2023

不知道你们的是否发布到linux模式使用,我在linux模式下会超时,不一定并发很高,k8s和docker模式下超时概率很大。但是在windows服务器下几乎没有。发一个接口,然后用jemter压测一下,很容易就超时了,可以试一下是不是。

@2881099
Copy link
Owner

2881099 commented Jul 6, 2023

基本都是远程访问超时,原因是处理不过来,压测超过了阀值(网络传输)

@xiaolei000129
Copy link

基本都是远程访问超时,原因是处理不过来,压测超过了阀值(网络传输)

不知道需要怎么处理

@2881099
Copy link
Owner

2881099 commented Jul 7, 2023

加钱升级服务器

@sky201955
Copy link

是一个连接池用一个线程来管理吗?
线程池创建一个新的连接,是否需要一个新的线程?
线程调度是否可能导致超时?

@NetFreeOps
Copy link

 System.Exception: 【10.0.10.10:6379/0】状态不可用,等待后台检查程序恢复方可使用。ERR max number of clients reached
  Command: PING 
   ---> CSRedis.RedisException: ERR max number of clients reached
   
         System.Exception: 【10.0.10.10:6379/0】状态不可用,等待后台检查程序恢复方可使用。Unable to write data to the transport connection: 远程主机强迫关闭了一个现有的连接。.
   ---> System.IO.IOException: Unable to write data to the transport connection: 远程主机强迫关闭了一个现有的连接。.
   ---> System.Net.Sockets.SocketException (10054): 远程主机强迫关闭了一个现有的连接。
     at System.Net.Sockets.NetworkStream.Write(Byte[] buffer, Int32 offset, Int32 count)
     --- End of inner exception stack trace ---
     at System.Net.Sockets.NetworkStream.Write(Byte[] buffer, Int32 offset, Int32 count)
     at CSRedis.Internal.IO.RedisIO.Write(Byte[] data)
     at CSRedis.Internal.RedisConnector.Call[T](RedisCommand`1 command)
     at CSRedis.RedisClient.Write[T](RedisCommand`1 command)
     at CSRedis.RedisClient.Ping()
     at CSRedis.RedisClientPoolPolicy.OnCheckAvailable(Object`1 obj)
     at CSRedis.RedisClientPoolPolicy.PrevReheatConnectionPool(ObjectPool`1 pool, Int32 minPoolSize)
     --- End of inner exception stack trace ---
     at CSRedis.Internal.ObjectPool.ObjectPool`1.GetFree(Boolean checkAvailable)
     at CSRedis.Internal.ObjectPool.ObjectPool`1.Get(Nullable`1 timeout)
     at CSRedis.CSRedisClient.GetAndExecute[T](RedisClientPool pool, Func`2 handler, Int32 jump, Int32 errtimes)
     at CSRedis.CSRedisClient.ExecuteScalar[T](String key, Func`3 hander)
     at CSRedis.CSRedisClient.Set(String key, Object value, TimeSpan expire, Nullable`1 exists)
     at RedisHelper`1.Set(String key, Object value, TimeSpan expire, Nullable`1 exists)
     
     我的也是经常这样,我隔几天就要重启一下

@2881099
Copy link
Owner

2881099 commented Dec 9, 2023

ERR max number of clients reached

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants