2

最近,我们在 ASP.NET 应用程序中遇到了一些奇怪的间歇性问题。这些问题包括:

  • 静态变量未初始化
  • 后台线程中止
  • (InProc) 会话状态丢失

奇怪的是,这些问题大约每 30 小时发生一次。“奇怪,”我们想……

好吧,我相信你们中的一些人在想,“对我来说,这听起来像是一个应用程序池回收属性。” 你是对的。我们的应用程序池设置为默认值 1740 分钟,然后它会自动回收导致我们丢失状态、静态等。

所以我的观点是,在 IIS、ASP.NET 中有一些东西会导致间歇性挂断。你遇到过哪些事情?

开始,

修改 web.config 文件可能会导致应用重新启动,这将导致所有会话结束(当您使用 InProc 模式时)。

非常感谢,

4

2 回答 2

2

您可能还需要考虑运行 asp.net 的 w3wp.exe 进程可能由于与框架相关的未处理异常而崩溃的可能性。如果这是问题的一部分,您会在罪魁祸首服务器上的系统和应用程序事件日志中找到明确指示 w3wp.exe 处理已停止的条目。问题是它不会告诉你为什么。它只会记录导致它停止运行的某些东西。

为了缓解这些症状,您可以首先通过将 InProc 更改为状态服务器(本地或 sql)来将会话与 w3wp.exe 进程分离。如果此进程崩溃,会话将不再丢失,但会在第一时间恢复到内存中。您还可以更改应用程序池中的设置,以不同的速率进行回收。如果 w3wp.exe 崩溃,您可能需要更快地回收并可能删除“启用故障保护”。

不过,所有这些都掩盖了问题。为了隔离这种性质的问题,您需要安装并运行IIS 调试诊断工具。它的崩溃/挂起报告非常有用,对于发现在 Asp.Net 和 IIS 之间的模糊空间中发生的问题绝对至关重要。

于 2010-11-09T17:36:03.937 回答
0

仅用于会话故障排除,这个就足够了... http://aspalliance.com/1182

另一方面,由于许多其他原因,可能会发生挂起。解决此类问题的最佳方法是使用任何工具(如 windbg 或 Debug Diagnostics)在问题发生时创建转储并创建内存转储。稍后可以分析这些内存转储的问题。

http://blogs.msdn.com/tess有很多关于调试各种场景的帖子。

于 2010-11-09T17:33:10.467 回答