gpt4 book ai didi

asp.net - 为什么页面处理的 AspNetSessionData 阶段会延迟我的页面 20 秒以上?

转载 作者:行者123 更新时间:2023-12-01 11:57:19 26 4
gpt4 key购买 nike

我有一个使用 ASP.NET 和“InProc” session 处理的 Web 应用程序。通常情况下,一切正常,但每天几百个请求的运行时间比正常情况要长得多。在 IIS 日志中,我可以看到这些页面(通常需要 2-5 秒才能运行)运行了 20 多秒。

我在详细模式下启用了失败请求跟踪,发现延迟发生在 AspNetSessionData 部分。在下面显示的示例中,AspNetSessionDataBegin 和 AspNetSessionDataEnd 之间有 39 秒的间隔。

我不确定下一步该做什么。我找不到造成这种延迟的任何原因,也找不到任何可以启用的日志记录功能来告诉我这里发生了什么。有谁知道为什么会这样,或者对我可以采取的其他步骤有什么建议来查找问题?

我的应用程序通常为每个用户在 session 中存储 1-5MB,主要是用于搜索的缓存数据。服务器有足够的可用内存,并且只运行大约 50 个用户。

Screenshot of Failed Request Trace

最佳答案

这可能是由 session 状态的锁争用引起的。看一下MSDN的ASP.NET Session State Overview的最后一段.另见 K. Scott Allen's helpful post关于这个问题。

如果页面使用 EnableSessionState="True"进行注释(或继承 web.config 默认值),则对该页面的所有请求都将获得 session 状态的写锁。所有其他使用 session 状态的请求——即使它们没有获得写锁——都会被阻止,直到该请求完成。

如果一个页面被注释为 EnableSessionState="ReadOnly",那么该页面将不会获得写锁,因此不会阻止其他请求。 (尽管它可能被另一个持有写锁的请求阻塞。)

要消除这种锁争用,您可能希望在 HttpContext.Cache 周围实现自己的 [更细粒度] 锁定。对象或静态 WeakReference秒。后者可能更有效。 (参见 Richard Kiessig 的 Ultra-Fast ASP.NET 的第 118-122 页。)

关于asp.net - 为什么页面处理的 AspNetSessionData 阶段会延迟我的页面 20 秒以上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5749532/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com