我们有两个 Web 应用程序(Azure Web 角色),它们在 System.Web.HttpApplication.BeginRequest 期间都会遇到偶尔的长时间延迟(40 到 60 秒)。我们知道这一点是因为我们使用 NewRelic 来监控我们的网络应用程序。 The usual culprit is thread agility issues由于 ASP.NET 的 session 状态锁定机制,但是我们不使用 ASP.NET session 状态,并且在其中一个站点上我们根本不使用 session 。
一个应用程序比另一个应用程序复杂得多并且延迟更多,但我将在这个问题中使用简单的应用程序来缩小根本原因。
简单的 Web 应用程序是一系列基于 ServiceStack 的 Web 服务。它不使用 session 。它仅充当基于 WCF 的服务层的中介。它主要是将请求传送到 WCF 服务,然后将响应映射到 View 以传输回代理。服务器甚至不会因为它们正在运行的负载而出汗(最多 2.5% CPU)。
那么,请问可能的原因是什么?
最佳答案
New Relic 没有特定于 ServiceStack 的检测,WCF 是非常基础的,没有自定义检测。没有更多信息,很难提供任何建议。线程敏捷性也是罪魁祸首,我建议先调查该路线。
New Relic 可能将时间归因于它不应该的方法。我可能会首先打开 New Relic Support 的票证,并包含您的所有信息(代理日志、IIS/ASP.NET 配置、自定义处理程序?以及您的 New Relic 图表的永久链接)。
关于asp.net - System.Web.HttpApplication.BeginRequest() 中的间歇性延迟,与 SessionState 无关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19409244/