我们有两个 Web 应用程序(Azure Web 角色),它们在 System.Web.HttpApplication.BeginRequest 期间都偶尔会出现长时间延迟(40 到 60 秒)。我们知道这一点是因为我们使用 NewRelic 来监控我们的网络应用程序。通常的罪魁祸首是由于 ASP.NET 的会话状态锁定机制导致的线程敏捷性问题,但是我们不使用 ASP.NET 会话状态,并且在其中一个站点上我们根本不使用会话。
一个应用程序比另一个应用程序复杂得多并且延迟更多,但我将在这个问题中使用简单的应用程序来希望缩小根本原因。
简单的 Web 应用程序是一系列基于 ServiceStack 的 Web 服务。它不使用会话。它仅充当基于 WCF 的服务层的中介。它主要将请求引导到 WCF 服务,然后将响应映射到视图以传输回代理。服务器甚至不会在它们运行的负载(最大 2.5% CPU)时出汗。
那么请问可能的原因是什么?
- 我最好的猜测是这是一个线程敏捷性问题,因为它似乎在等待某些东西,这表明某处有锁。但是如果不是会话状态,它还在等什么?NewRelic 或 ServiceStack 导致锁定?
- NewRelic的报错,没有问题。好吧,当我们过去使用 ASP.NET 会话状态时,NewRelic 正确地报告了问题,并且得到了更多这些延迟。