2009-11-11 66 views
2

我們有一個asp.net應用程序,它通過httpwebrequest大量使用REST/json服務,並大量使用Web緩存。看似偶爾,工作進程停止響應。瀏覽器坐在期待一個響應,並從來沒有得到一個。只有應用程序池重啓似乎可以解決問題。沒有未處理的異常或我們已經注意到的任何其他異常。 cpu和內存負載很低(< 10%cpu util,> 80%可用內存)什麼可以導致asp.net停止響應

我們遇到的唯一可能的提示是我們在事件日誌中看到'deadlock detected'消息,但沒有一致。此外,我們已經消除了我們認爲是這種爭用的唯一可能原因(通過開始/結束請求執行多個併發httpwebrequest)。

有什麼想法?

贏得03服務器/數據中心版(在Amazon EC2) asp.net 3.5

回答

2

當你有使用低CPU無響應的應用程序,這是最有可能是併發性問題。你要麼死鎖會導致你所有的線程停頓,要麼你的異步線程永遠完成並且ThreadPool最終會捱餓。由於您運行的是ASP.Net,因此您應該檢查ThreadPool的工作方式。您可以觀看性能計數器,或者更好地使用windbg附加到您的應用程序(可以從Windows調試工具http://www.microsoft.com/whdc/DevTools/Debugging/default.mspx中獲得)。

啓動的WinDbg,重視asp.net程序,然後在命令提示符:

.loadby mscorwks sos 
!ThreadPool 

更妙的是,下載sosex擴展(http://www.stevestechspot.com/CommentView,guid,9fdcf4a4-6e09-4807-bc31-ac1adf836f6c.aspx),並檢查死鎖與

!dlk 

檢查哪些線程阻塞,切換到其中一個線程(使用UI或命令行)並鍵入

!CLRStack 

有堆棧跟蹤顯示哪種方法阻止您的應用程序。

+0

感謝您的工具指針(sosex)。我懷疑僵局是從一開始的,但是這讓我弄清楚它是什麼。簡而言之,如果你有一個跟蹤監聽器,*和*一個跟蹤appender,你可以進入死鎖狀態,因爲system.diagnostic的東西和跟蹤appender都會鎖定'this'或監聽器。壞。 – kolosy 2009-11-12 22:12:13

相關問題