为什么我的IIS6请求在HTTPSYS_CACHEABLE阶段长时间冻结?

我的一个应用程序在系统特定部分遇到间歇性延迟。 用户将点击“保存”button,有时需要额外的30秒来回应。 我打开ASP.NET跟踪 ,然后使用Logman和ETWlogging详细的跟踪。

跟踪显示延迟发生在“HTTPSYS_CACHEABLE”阶段。 但是,我不明白为什么这会造成延误。 我没有find有关IIS6跟踪阶段的任何有用的文档,谷歌没有find任何人解决了这个问题。

我试图通过更改registry项和编辑machine.config来禁用HTTP.SYScaching。 这两个操作都不会导致页面性能或跟踪日志发生任何变化。

跟踪结果的相关部分是本节。 注意时间戳之间的差距。

IISCache: URL_CACHE_ACCESS_END - IIS ends accessing URL cache ErrorCode: 0x00000000 PhysicalPath: H:\JobTraQ_Site\ URLInfoFromCache: 1 URLInfoAddedToCache: 0 ContextIDSeq: 4 Timestamp: 00:30:29.406.250000 IISCache: HTTPSYS_CACHEABLE - IIS decides if the request is HTTP.SYS cacheable Reason: RESPONSE_MORE_DATA HttpsysCacheable: 0 ContextIDSeq: 4 Timestamp: 00:30:53.421.875000 

我发现URL_CACHE_ACCESS_END跟踪条目发生在ASP.NET页面处理完成之前,而HTTPSYS_CACHEABLE发生在完成之后。 我通过在代码中添加5秒钟的睡眠,然后比较有无睡眠的痕迹来发现这一点。 睡眠延迟显示在HTTPSYS_CACHEABLE时间戳中。

所以,这不是一个IIS或ASP.NET的问题。 就我而言,我们的开发人员之一改变了一些代码,导致在某些情况下运行一个长循环,我们的用户只是碰巧触发。