首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >红系TimeoutException

红系TimeoutException
EN

Stack Overflow用户
提问于 2021-01-26 09:59:55
回答 2查看 901关注 0票数 3

我每隔几秒钟就会将一些数据从控制台应用程序中推到Redis实例。我大概就是这样做的:

代码语言:javascript
复制
            int foo = GetFoo();
            BigObject bar = GetBigObject();

            _cache.StringSet("Foo", JsonConvert.SerializeObject(foo));
            _cache.StringSet("Bar", JsonConvert.SerializeObject(bar));

但过了一段时间我得到了一个例外:

StackExchange.Redis.RedisTimeoutException:‘超时值执行集RtSignal-op (5000 Qs),inst: 0,qs: 0,aw: False,rs: CompletePendingMessage,in: 0,in-管道: 5,serverEndpoint: un期/localhost:5002,mgr: 10中的9,clientName: SVGD0083,IOCP:(Busy=0,Free=1000,Min=16,Max=1000),WORKER:(Busy=3,Free=32764,Min=16,Max=32767),v: 2.0.593.37019 (请看本文中一些常见的客户端问题,这些问题可能导致超时:https://stackexchange.github.io/StackExchange.Redis/Timeouts)

在链接到的页面中,有一个建议认为这个问题可能是Thread Theft的结果,解决方案是包含以下一行:

代码语言:javascript
复制
ConnectionMultiplexer.SetFeatureFlag("preventthreadtheft", true);

问题是,在SetFeatureFlag框架中似乎不存在一个.NET方法。

有什么想法吗?

EN

回答 2

Stack Overflow用户

发布于 2021-01-27 16:25:51

你的物品有多大?如果JsonConvert.SerializeObject(foo)返回一个500 to的字符串,那么是的:您将度过糟糕的一天。

此外,服务器还在做什么?这需要在服务器上进行一些深入研究,但是: redis SLOWLOG命令可以将信息提供给长期运行的操作。如果任何事情花费了很长的时间(我会开始对任何花费超过10毫秒的东西感到不安),那么您的服务器本质上是处于停滞状态,这需要进行调查--但这不是库可以修复的。

如果您正在与一个遥远的服务器交谈,您可能需要一个更大的超时。

最后,我非常怀疑这个特定的场景是否与线程盗窃有关;如果说有什么关系的话,那听起来就像是在抓吸管(比喻)。但是如果ConnectionMultiplexer.SetFeatureFlag不存在,那么您可能使用的是旧的库版本。那么:您使用的是什么库版本?

票数 2
EN

Stack Overflow用户

发布于 2021-01-27 16:19:20

StackExchange.Redis不是.net框架的一部分。

_cache可能是StackExchange.Redis.IDatabase对象类型。因此,只需添加在应用程序中初始化redis支持的行--可能是在startup.cs。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65899195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档