2010-11-09 82 views
2

最近,我們在ASP.NET應用程序中遇到了一些奇怪的間歇性問題。這些問題包括:常見的ASP.NET間歇性掛起

  • 靜態變量成爲未初始化
  • 後臺線程中止
  • (InProc方式)會話狀態丟失

奇怪的是,發生這些問題大約每30小時。 「奇怪」,我們認爲...

嗯,我相信你們中的一些人在想,「聽起來像是一個應用程序池回收屬性給我。」你是對的。我們的應用程序池默認設置爲1740分鐘,然後它會自動回收,導致我們失去狀態,靜態等。

所以我的觀點是,IIS,ASP.NET中有一些東西,會導致間歇性的掛斷。你遇到的一些事情是什麼?

要開始了,

修改web.config文件可能會導致應用程序重新啓動,這將導致所有會話結束(當您使用的是InProc模式)。

非常感謝,

+0

我們曾經因爲ASP和ASP.NET應用程序中數據庫連接編碼不完善而導致間歇性掛起問題,並且它們沒有正確處理。然而,追蹤其中的一些卻是非常困難的,但是...... – dooburt 2010-11-09 17:33:28

回答

0

只是爲了Session的故障,這一個就足夠了... http://aspalliance.com/1182

掛起,另一方面可能發生由於多方面的原因。解決這些問題的最好方法是使用windbg或Debug Diagnostics等任何工具在問題發生時創建轉儲並創建內存轉儲。稍後可以分析這些內存轉儲的問題。

http://blogs.msdn.com/tess有很多關於調試各種場景的文章。

2

您可能還想考慮由於與框架相關的未處理異常,asp.net運行的w3wp.exe進程可能會崩潰的可能性。如果這是問題的一部分,您會在系統和應用程序事件日誌中找到罪魁禍首服務器上的條目,這些條目明確指示w3wp.exe處理被暫停。問題是它不會告訴你爲什麼。它只會記錄導致它停止運作的事情。

爲了緩解症狀,您可以通過將InProc更改爲狀態服務器(本地或sql)將您的會話從w3wp.exe進程中解耦出來。如果這個過程崩潰了,那麼會話將不會再丟失,但它會在第一時間恢復到內存。您還可以更改應用程序池中的設置以不同的速率進行回收。如果w3wp.exe崩潰,您可能需要更快速地回收,並可能刪除「啓用失敗保護」。

所有這些只是掩蓋了問題。爲了隔離這種性質的問題,您需要安裝並運行IIS Debug Diagnostic Tool。它的崩潰/掛起報告非常豐富,對於找到Asp.Net和IIS之間的空白區域出現的問題絕對至關重要。