首页 > 解决方案 > Azure 应用服务的响应非常慢

问题描述

几周后,我看到我的 web 应用程序的响应时间很长。它是托管在 Azure 上的应用服务中的 .NET 应用。我说一个简单的请求超过 20 秒。

在以下请求中,webapp 收到一个请求,它检查身份验证令牌是否有效,然后查询数据库并运行一些简单的代码以返回一些 json。

要使用此 .NET 后端服务,用户需要使用 Azure AD 进行身份验证,我们为此使用 JWT 令牌。每次网络服务器收到一些请求时,它都会直接询问 Azure AD 用户是否经过身份验证。在触发 Azure AD 请求之前,几乎没有触及任何代码。

通常上述所有内容(检查身份验证、执行数据库查询、将请求解析为 json)都应花费 <500 毫秒。

但现在,有时,我们可以在 Application Insights 中看到这一点:

Application Insights 屏幕截图

我看到的是,在询问 Azure AD 令牌是否有效之前,网络服务器“挂起”了大约12 秒!

此外,在那之后发生的一切,也花费了太多时间。我也不明白这两个数据库请求之间的差距。第二个请求永远不会超过 1000 毫秒,但在屏幕截图中确实如此。

在同一时间范围内,我们收到了很多缓慢的响应。一小时后,一切都恢复正常(然后屏幕截图中的条纹条紧随其后,就像它应该的那样),再过一个小时,它又变慢了。

我不知道我可以从哪里开始搜索。我希望你们能给我一些搜索方向和/或为什么会发生这种情况的想法。

我已经检查了服务器的 CPU 负载和内存负载。它有时很高(峰值 > 80%),但我看不到 100% 左右的明显瓶颈。此外,该负载是相对恒定的,并且与缓慢的时刻没有共享峰值,所以我认为问题不存在。

编辑:我使用 Web 服务诊断来检查是否可以给我一些指导。在这里,我看到以下内容:

在此处输入图像描述

HandlerChanged From(ExtensionlessUrlHandler-Integrated-4.0) to (System.Web.Http.WebHost.HttpControllerHandler)ManagedPipelineHandler。有谁知道那是什么以及我如何调试它?

标签: .netazureperformance

解决方案


根据 RuslanY 博客上的提示(https://ruslany.net/2019/06/azure-app-service-deployment-插槽提示和技巧/)。上周五我删除了设置,从那时起问题就不再发生了。我猜 ExtentionlessUrlHandler 类中的某些东西使用了 WCF,正如 RuslanY 在博客中警告的那样。没有想到其他解释,但我很高兴我的应用程序解决了它。希望这也会对您有所帮助。


推荐阅读