Multithreading StackExchange Redis超时以及如何在.NET Core中设置最小线程池数?

Multithreading StackExchange Redis超时以及如何在.NET Core中设置最小线程池数?,multithreading,azure,asp.net-core,caching,redis,Multithreading,Azure,Asp.net Core,Caching,Redis,我在尝试从azure redis缓存中查询一个非常简单的字符串(我的应用程序日志级别)时遇到以下错误,该字符串突然出现在我的生产环境中(此查询经常发生): 无法从Redis缓存反序列化日志级别:执行超时 获取(5000ms),下一步:获取日志级别:ApplicationAPI,inst:2,qu:0, qs:1289,aw:False,rs:ReadAsync,ws:Idle,in:130355, serverEndpoint:XXXX管理器: 10/10可用,客户名称:application-

我在尝试从azure redis缓存中查询一个非常简单的字符串(我的应用程序日志级别)时遇到以下错误,该字符串突然出现在我的生产环境中(此查询经常发生):

无法从Redis缓存反序列化日志级别:执行超时 获取(5000ms),下一步:获取日志级别:ApplicationAPI,inst:2,qu:0, qs:1289,aw:False,rs:ReadAsync,ws:Idle,in:130355, serverEndpoint:XXXX管理器: 10/10可用,客户名称:application-api-67cdbb4cfd-lkqdk, IOCP:(忙=0,空闲=1000,最小=1,最大=1000),工作者: (忙=3515,闲=29252,最小=1,最大=32767),v:2.0.601.3402 请参阅本文,了解一些可能导致错误的常见客户端问题 超时: )

我读过他们建议的主题,也读过一些文章

根据我在Azure dashboard中阅读的指标,我认为我没有超出当前的内存或连接限制。这似乎与线程池中设置的工作线程数有关。我读到我应该:

“将IOCP和工作线程的最小配置值设置为 大于默认值的值”

我还读到,我可以使用.NETCore中的
ThreadPool.SetMinThreads(Int32,Int32)
api设置我的最小线程数

所以基本上我的问题是:

  • 在AKS集群中运行应用程序时,设置最小线程池是否安全
  • 我应该在哪里设置此值?在Program.cs中?在Startup.cs中
  • 根据我在上面看到的日志,将我的最低级别设置为4000安全吗?那么我是否高于工作线程的忙阈值

  • 我会直接回答你的问题,因为你已经理解了潜在的问题

  • 如果你知道自己在做什么(我想你也知道自己在做什么),这是安全的。如果您在另一个Kubernetes群集服务上或甚至在IIS中运行它,它也将是安全的

  • 您可以在Program.cs的
    Main
    方法中设置该值

  • 是的,您应该将其设置为3515以上(异常消息中的忙计数),并监视您的应用程序和节点度量。你可以从4000开始。然而,这是一个很高的数字(我不是说“太高”,只是“高”)。因此,您可能需要创建更多的pod,而不是将最小工作线程值增加这么多。不幸的是,这里没有银弹。您必须尝试一个值,监视应用程序(响应时间、CPU、RAM等),并调整该值


  • 我会直接回答你的问题,因为你已经理解了潜在的问题

  • 如果你知道自己在做什么(我想你也知道自己在做什么),这是安全的。如果您在另一个Kubernetes群集服务上或甚至在IIS中运行它,它也将是安全的

  • 您可以在Program.cs的
    Main
    方法中设置该值

  • 是的,您应该将其设置为3515以上(异常消息中的忙计数),并监视您的应用程序和节点度量。你可以从4000开始。然而,这是一个很高的数字(我不是说“太高”,只是“高”)。因此,您可能需要创建更多的pod,而不是将最小工作线程值增加这么多。不幸的是,这里没有银弹。您必须尝试一个值,监视应用程序(响应时间、CPU、RAM等),并调整该值