【问题标题】:Common ASP.NET Intermittent Hang-Ups常见的 ASP.NET 间歇性挂断
【发布时间】:2011-05-07 09:38:29
【问题描述】:

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

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

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

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

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

开始,

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

非常感谢,

【问题讨论】:

  • 我们曾经遇到过一些间歇性挂起的问题,因为 ASP 和 ASP.NET 应用程序中的数据库连接编码不当,而且它们没有被正确处理。然而,追踪其中一些是出了名的困难......

标签: asp.net iis session application-pool inproc


【解决方案1】:

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

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

所有这些只是掩盖了问题。为了隔离这种性质的问题,您需要安装并运行IIS Debug Diagnostic Tool。它的崩溃/挂起报告信息量很大,对于发现在 Asp.Net 和 IIS 之间的模糊空间中发生的问题绝对至关重要。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-15
      • 1970-01-01
      • 1970-01-01
      • 2013-05-17
      相关资源
      最近更新 更多