【问题标题】:Number of threads constantly rising ASP .NET CoreASP .NET Core 线程数不断上升
【发布时间】:2021-11-14 23:46:35
【问题描述】:

我在 IIS 上运行 .net core web api 应用程序。在应用程序的某些部分,我调用 wcf 服务以获取一些信息(异步、使用异步等待等)有时该 wcf 服务不可用并且我得到超时(默认为 1 分钟)然后启动问题。因为有很多对我的 API 的请求,等等 wcf 服务,线程数开始增加,在某些时候 wcf 服务开始正常工作,但是当我的线程数超过 200(我猜)它开始不断上升(我猜每秒 1 个线程)并且它不会停止。那时我的应用程序没用了,唯一的方法是在 IIS 上停止并启动应用程序池,然后我的应用程序开始正常工作。

这是一个月内的一个案例,但我不知道该怎么办。我尝试了很多。下一个尝试是在调用 wcf 服务时降低超时。

【问题讨论】:

  • 你的代码是做什么的? ASP.NET Core 不会无缘无故地启动线程。不知何故,你的代码阻塞了这些线程。如果将async/await 与 WCF 的异步方法一起使用,则线程在等待时不会被阻塞
  • 如果您知道远程服务已损坏,最好停止使用它。您可以自己实现代码或使用例如Polly 来实现重试或停止使用服务等策略
  • 我觉得可以这样: 1.调整服务器上的最大线程数。 2.设置启动优先级,WCF程序优先。 3.删除无用程序。

标签: c# wcf .net-core threadpool


【解决方案1】:

听起来像断路器模式可以帮助你?

断路器背后的基本思想非常简单。您将受保护的函数调用包装在断路器对象中,该对象监视故障。一旦故障达到某个阈值,断路器就会跳闸,并且对断路器的所有进一步调用都会返回错误,而根本不会进行受保护的调用。

阅读更多:https://martinfowler.com/bliki/CircuitBreaker.html

【讨论】:

  • @p 当 wcf 服务关闭时,它不会对 wcf 服务的大量请求进行排队。
  • 断路器只有在你要调用的服务已知永久失败时才有用,因此你可以停止使用它。尽管您希望重试而不是放弃服务,但对于大多数远程服务。如果重复重试表明故障是永久性的,您只会使用断路器
  • 在这种情况下我们不知道的太多了,但我认为在 wcf 服务没有响应时不调用它而使调用失败可能是个好主意。
猜你喜欢
  • 2019-07-10
  • 1970-01-01
  • 2021-07-04
  • 2018-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-18
  • 2017-03-04
相关资源
最近更新 更多