我正在将一个net 4库移植到net 1.0.0-预览2
在开发我的网络核心库时,它使用的是Stackexchange.Redis版本1.2.1,在Net4版本中使用1.2.0。
在Net4中,我的库在调用Redis命令时从未失败过。
在net中,我随机地得到这个错误:
System.TimeoutException: Timeout performing GET netkey, inst: 6, queue: 10, qu: 0, qs: 10, qc: 0, wr: 0, wq: 0, in: 645, ar: 0, clientName: XXXXXX, serverEndpoint: Unspecified/XXXXXXX, keyHashSlot: XXXXX(Please take a look at this article for some common client-side issues that can cause timeouts: https://github.com/StackExchange/StackExchange.Redis/tree/master/Docs/Timeouts.md)
at StackExchange.Redis.ConnectionMultiplexer.ExecuteSyncImpl[T](Message message, ResultProcessor`1 processor, ServerEndPoint server)
at StackExchange.Redis.RedisBase.ExecuteSync[T](Message message, ResultProcessor`1 processor, ServerEndPoint server)
at StackExchange.Redis.RedisDatabase.StringGet(RedisKey key, CommandFlags flags)使用默认配置(连接超时、连接重试等)
更新添加了“保持活动”配置,但仍然失败。
有什么想法吗?
发布于 2017-03-27 19:02:35
解决方案:将SyncTimeout配置更新为10000。试了5000次,失败了,然后用10000修正了。默认值是1000。
发布于 2017-05-16 14:32:35
更新的SyncTimeout不是一个好的选择,因为您的redis命令运行得非常慢,超时的原因是. not核心默认线程在线程池中的计数太低。
只需在环境变量中设置maxThreads即可。
例:
ComPlus_ThreadPool_ForceMaxWorkerThreads 1000 ComPlus_ThreadPool_ForceMinWorkerThreads 50
然后以管理员身份运行app (允许app读取系统环境变量)
对我来说很管用
发布于 2017-03-27 18:08:16
你试过增加可用的线程吗?(注意,这不是来自.Net核心项目,所以我不能百分之百确定语法是否相同。)
在我的Application_Start方法中,Global.asax.cs中有以下内容
private static int THREAD_MIN = 50; // 4 cores in production = 200
...
//Per Redis docs, upping the number of threads available to handle the IO demands on the cloud.
//https://github.com/StackExchange/StackExchange.Redis/blob/master/Docs/Timeouts.md
ThreadPool.SetMinThreads(THREAD_MIN, THREAD_MIN); https://stackoverflow.com/questions/42956377
复制相似问题