自几周以来,我发现我的Web应用响应时间非常长。这是一个托管在Azure上的.NET应用程序服务。我指的是简单请求需要超过20秒的时间。
在以下请求中,Web应用程序接收请求,检查身份验证令牌是否有效,然后查询数据库并运行一些简单代码以返回一些JSON数据。
要使用此.NET后端服务,用户需要通过Azure AD进行身份验证,我们使用JWT令牌进行身份验证。每当Web服务器接收到请求时,它直接询问Azure AD用户是否经过身份验证。在发出Azure AD请求之前,几乎没有任何代码被触及。
通常以上所有操作(检查身份验证、执行数据库查询、将请求解析为JSON)应该耗费少于500毫秒。
但现在,有时我们可以在应用程序洞察中看到这种情况: 我看到的是,在web服务器询问Azure AD令牌是否有效之前,服务器会“挂起”约12秒钟!此外,之后发生的所有事情所需的时间也太长了。另外,我也不明白两个数据库请求之间的差距。第二个请求可能永远不会超过> 1000ms,但在截图中确实超过了此时间。
我们在同一时间段收到了许多这样的慢响应。一小时后,一切都恢复正常(然后截图中的条纹状条形开始紧接着彼此出现,就像它应该的那样),又一个小时后,它再次变慢。 我不知道从哪里开始搜索。我希望你们能给我一些搜索方向和/或想法,为什么会发生这种情况。
我已经检查了服务器的CPU负载和内存负载。有时很高(峰值> 80%),但我没有看到100%左右的明显瓶颈。此外,该负载相对稳定,并且与慢时刻没有重合的峰值,因此我认为问题不在那里。
编辑:我使用Web服务诊断来查看它是否可以为我提供一些指导。在这里,我看到以下内容:
在以下请求中,Web应用程序接收请求,检查身份验证令牌是否有效,然后查询数据库并运行一些简单代码以返回一些JSON数据。
要使用此.NET后端服务,用户需要通过Azure AD进行身份验证,我们使用JWT令牌进行身份验证。每当Web服务器接收到请求时,它直接询问Azure AD用户是否经过身份验证。在发出Azure AD请求之前,几乎没有任何代码被触及。
通常以上所有操作(检查身份验证、执行数据库查询、将请求解析为JSON)应该耗费少于500毫秒。
但现在,有时我们可以在应用程序洞察中看到这种情况: 我看到的是,在web服务器询问Azure AD令牌是否有效之前,服务器会“挂起”约12秒钟!此外,之后发生的所有事情所需的时间也太长了。另外,我也不明白两个数据库请求之间的差距。第二个请求可能永远不会超过> 1000ms,但在截图中确实超过了此时间。
我们在同一时间段收到了许多这样的慢响应。一小时后,一切都恢复正常(然后截图中的条纹状条形开始紧接着彼此出现,就像它应该的那样),又一个小时后,它再次变慢。 我不知道从哪里开始搜索。我希望你们能给我一些搜索方向和/或想法,为什么会发生这种情况。
我已经检查了服务器的CPU负载和内存负载。有时很高(峰值> 80%),但我没有看到100%左右的明显瓶颈。此外,该负载相对稳定,并且与慢时刻没有重合的峰值,因此我认为问题不在那里。
编辑:我使用Web服务诊断来查看它是否可以为我提供一些指导。在这里,我看到以下内容:
HandlerChanged From(ExtensionlessUrlHandler-Integrated-4.0) to (System.Web.Http.WebHost.HttpControllerHandler)
和ManagedPipelineHandler
。有人知道这是什么,我该如何调试?
HandlerChanged From(ExtensionlessUrlHandler-Integrated-4.0) to (System.Web.Http.WebHost.HttpControllerHandler)
。你有什么想法吗?我也会将这些信息添加到我的问题中。 - Richh94