微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Microsoft Azure中托管的.NET CORE API应用程序超时异常Redis缓存,SQL,.NET Core

如何解决Microsoft Azure中托管的.NET CORE API应用程序超时异常Redis缓存,SQL,.NET Core

我具有以下基础结构: .NET Core 3.1 API,该API托管在VNet中。在VNet内部,我们有8台服务器,这些服务器带有负载平衡器+ sql Server + Redis缓存。

我们在登录操作(不是轻量级操作)上每秒运行1200次API负载测试。目前,所有服务器上的负载为5-10%。但是问题是我们遇到了API超时和Redis超时问题。

似乎有些东西阻塞了我们的线程

这是从我的Startup.cs中获得的(我们尝试使用该值,但没有成功):

  var threadCount = 2000; 
  ThreadPool.GetMaxThreads(out _,out var completionThreads); 
  ThreadPool.SetMinThreads(threadCount,completionThreads);

这是来自* .csproj文件

 <PropertyGroup>
<ThreadPoolMinThreads>315</ThreadPoolMinThreads>

Update1->添加了Redis问题信息

Redis错误: StackExchange.Redis.RedisTimeoutException:等待超时的响应(出站= 0KiB,入站= 0KiB,经过10008ms,超时为10000ms),命令= GET,下一条:SET key_digievents____freeevent_4072,inst:0,qu:0,qs:684,aw:False ,rs:ReadAsync,ws:空闲,输入:2197285,管道内:0,管道外:0,服务器端点:10.0.0.34:6379,mc:1/1/0,mgr:10 of 10 available,clientName: akssocial27apiapp-xkkb4,IOCP:(忙= 0,免费= 1000,最小= 1000,最大= 1000),工作人员:(忙= 430,免费= 32337,最小= 315,最大= 32767),v:2.1.58.34321 StackExchange.Redis.RedisTimeoutException:等待超时的响应(出站= 0KiB,入站= 0KiB,经过10008ms,超时为10000ms),命令= GET,下一条:SET key_digievents____freeevent_4072,inst:0,qu:0,qs:684,aw:False ,rs:ReadAsync,ws:空闲,输入:2197285,管道内:0,管道外:0,服务器端点:10.0.0.34:6379,mc:1/1/0,mgr:10 of 10 available,clientName: akssocial27apiapp-xkkb4,IOCP:(忙= 0,免费= 1000,最小= 1000,最大= 1000),工作人员:(忙= 430,免费= 32337,最小= 315,最大= 32767),v:2.1.58.34321 在Datadog.Trace.ClrProfiler.Integrations.StackExchange.Redis.ConnectionMultiplexer.ExecuteAsyncImplInternal [T](对象多路复用器,对象消息,对象处理器,对象状态,对象服务器,Func`6 originalMethod)

我将很乐意为您提供任何建议。 预先感谢。

解决方法

许多人升级到2.x时遇到TimeoutException

https://github.com/StackExchange/StackExchange.Redis/issues/1226

此解决方案可能会帮助您: Are you seeing a high number of busyio or busyworker threads in the timeout exception?

帖子结尾处显示:

在.Net Core中,添加环境变量 COMPlus_ThreadPool_ForceMinWorkerThreads覆盖默认值 MinThreads设置,根据环境/注册表配置 旋钮-您也可以使用与ThreadPool.SetMinThreads()方法相同的方法 如上所述。

,

下面是我随笔附上我所问问题的文字。我希望这可以帮助某人并节省很多时间。

首先,我们没有任何例外/错误/报告,带宽是Azure基础结构的瓶颈。这只是我们的假设。但是,为了反驳这一假设,我们增加了很多容量,甚至MS Azure团队都说我们的配置超出了使用范围。 因此带宽从来都不是问题。 它的局限性:

  1. StackExchangeRedis Nuget软件包,尤其是当它处理更多内容时 数据字节。

  2. 分析称我们称很多不必要的事情 端点或我们不需要该页面的数据。

因此,作为我的POV,我们需要对如何使用StackExchangeRedis包来处理最少且仅必要的数据以及如何减少对FE等不必要端点的调用进行优化。

我的队友一直与开发StachExchangeRedis的人保持联系。开发人员承认,巨大的数据块具有局限性。他还告诉我们,我们不是唯一遇到此问题的人。

因此,在所有讨论之后,我们优化了对GET / SET操作的调用。它使我们能够以更加精确和有效的方式处理数据字节,以实现必要的终结点,从而切断所有不需要的终结点和调用。我们还在后端实现了某种压缩。

最后,我们添加了其他区域,使我们可以改善当前状况。

尽管如此,我们正在考虑跳过用法Redis,转而使用NoSQL解决方案。我们将立即解决几个问题-缓存问题和实时数据+大数据的SQL限制(到目前为止,这仅是一个想法)

P.S。影响Redis性能的因素

  • 在许多实际场景中,Redis吞吐量受网络的限制要早于CPU的限制。要在单个服务器上整合多个高吞吐量Redis实例,值得考虑放置一个10 Gbit / s NIC或多个具有TCP / IP绑定的1 GBit / s NIC。
  • CPU是另一个非常重要的因素。作为单线程,Redis 偏爱具有大量高速缓存且内核不多的快速CPU。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。