Wil*_*gas 8 multithreading azure azure-web-app-service
我在P1V2 定价层上有一个应用服务,用作移动应用的后端。我通常没有很多用户,但几个月前出现了用户高峰,导致应用程序服务一次无法使用几个小时。
从指标中,我可以看到应用程序服务的 CPU 和内存都很好,但当问题发生时,我们确实看到线程数越来越高。似乎每个请求都会占用另一个线程,但没有一个线程被释放,因此在此期间没有完成任何请求。当发生这种情况时,如果我们重置应用程序服务,线程计数会暂时下降,但随后会再次激增。我现在唯一的缓解措施是在发生这种情况时扩展服务,这需要几分钟的时间,并且会花费我大量的金钱和精力。
我尝试过设置线程池中的最小和最大线程,并限制每个 CPU 的最大并发请求数,但没有任何帮助。我只需使用 5 个最常用的 API 即可重现该问题。它们都对同样托管在 azure 上的 SQL 数据库进行异步调用。我使用async/await并在调用后释放上下文。我使用实体框架作为我们的 ORM。
我支付的应用程序服务计划应该能够轻松处理负载,并且只要没有突然的请求高峰,它就不会出现问题。但是,当服务出现故障时,它可能会一次停留数小时,并且重新启动或停止服务根本没有帮助。我们已将后端恢复到旧版本,问题仍然存在。
我可以通过向后端发送请求来轻松重现该问题。您可以在下面找到所发生情况的示例。向我们指出的一件事是,无论我们发送多少请求,我们都不会看到 Http 队列长度增加。
我面临着同样的问题,我们没有对数据库的异步/等待访问。线程使用量的增加完全是随机的。
您可能使用 Redis 缓存和 StackExchange 吗?我把我的文件放在上面(就我而言)。
归档时间: |
|
查看次数: |
8968 次 |
最近记录: |