2010-11-09 83 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之间的空白区域出现的问题绝对至关重要。