2015-11-24 74 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