gpt4 book ai didi

asp.net - 如何追踪我的应用程序被锁定的位置

转载 作者:行者123 更新时间:2023-12-03 00:32:28 27 4
gpt4 key购买 nike

我有一个托管的 Windows Azure 网站。我发现了一种情况,网站在用户的网络浏览器中被锁定(我几个月前问过这个问题 - Launching SSRS Report causes browser to hang)。

我已经设置了流式日志记录,现在可以在 VS2015 中查看流。在我的 global.asax 中,我在每个处理程序的开头和结尾添加了一条跟踪语句。关于我失败的(挂起的)请求 - 请参阅链接的帖子了解更多详细信息 - 我看到“PostMapRequestHandler”事件完全触发。下一个似乎触发的事件(基于监视成功的请求)是 AcquireRequestState。

在请求失败的状态下,我从未看到 AcquireRequestState 完成。如果我故意输入错误 - 抛出新异常(“抛出我”) - 应用程序将出现蓝屏。但是,如果我这里只有跟踪语句,我永远不会看到这个方法完成。

当我处于这种糟糕的状态时,浏览器永远不会从服务器收到响应。等待大约 5-10 分钟后,页面将达到 500。只有完全关闭浏览器并打开一个新窗口,我才能解决这个问题,本质上是扔掉旧的 session 信息。

  1. 我还可以在哪里挖掘以找出此全局方法处理程序失败的原因?
  2. AcquireRequestState 未完成告诉我什么?我的直觉告诉我,我正在处理一些“糟糕的” session 魔力,但我有点困惑......

最佳答案

有几种可能性:

  1. 根据您运行网站的方式,您也许可以将 .PDB 文件和其他代码放到服务器上,并在问题发生时捕获进程的快照(您需要桌面访问权限服务器,这取决于您用来托管站点的 Azure 系统)。在任务管理器中,右键单击相应的 w3wp 进程并选择“创建转储文件”。
  2. 它已被弃用,但在过去,我使用 Thread.Suspend()new StackTrace(thread, true) 获得了公平(不是很好)的结果和 Thread.Resume()。请注意,其中一些函数已被弃用,这需要非常小心地完成。当每个请求进来时,您需要非常仔细创建一个线程列表,并添加一种新类型的请求,该请求遍历列表以获取线程状态并将其转储出来。 (.NET 中缺乏此功能对于诊断像您这样的问题(这在较大的系统中并不罕见)是一个严重的问题。
  3. 在导致问题的整个执行路径中放置额外的临时日志记录代码,重新创建问题,反复检查日志结果,并添加更多日志记录,直到找到问题为止。

对我来说,这听起来像是一个无限循环。

关于asp.net - 如何追踪我的应用程序被锁定的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33904273/

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