2015-11-24 72 views
2

我有一个托管的Windows Azure网站。我发现了一个场景,网站锁定在用户的网页浏览器中(几个月前我问过这个问题 - Launching SSRS Report causes browser to hang)。如何跟踪我的应用程序锁定的位置

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

在我失败的请求状态下,我从来没有看到AcquireRequestState完成。如果我输入了一个有目的的错误 - 抛出新的异常(“扔我”) - 应用程序将黄色屏幕。但是,如果我在这里只有我的跟踪陈述,我从来没有看到这个方法完成。

当我处于这种不良状态时,浏览器从不会收到服务器的回应。大约5-10分钟的等待后,该页面将为500。如果我完全关闭浏览器并打开一个新窗口,本质上只能扔掉旧的会话信息,我只能解决这个问题。

  1. 我还可以在哪里找到在这个全局方法处理程序中失败的原因?
  2. 它是什么告诉我AcquireRequestState没有完成?我的直觉告诉我,我处理一些“坏”会议的魔力在这里,但也有点难倒...

回答

0

有几个可能性:你如何运行

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

这听起来很像一个无限循环给我。

+0

非常感谢@James,完全同意re:无限循环。我只是希望找到循环发生的地方,以便我可以更正我的代码。我会采取你的建议旋转,敬请期待! – ewitkows

+0

哦,不幸的是选项1不会帮助,因为它是一个托管的天青网站,我没有访问直接VM = \ – ewitkows

0

您是否尝试过调试器连接到您的网络应用?您可以这样做: https://azure.microsoft.com/en-us/documentation/articles/web-sites-dotnet-troubleshoot-visual-studio/

连接调试器将允许您查看所有线程和调用堆栈,因此它应该有助于诊断问题。

+0

谢谢@theadriangreen,我有远程调试,但它没有帮助。我看到断点在AcquireRequestState中触发了我的跟踪语句,一旦它离开事件处理程序,就没有其他事情发生。我希望能够追踪到下一步以及它将要死去的地方,但是就我所能得到的调试和跟踪而言,只是停止指示什么是错误的 – ewitkows