【问题标题】:One application pool keeps hanging IIS 7一个应用程序池一直挂着 IIS 7
【发布时间】:2012-10-31 09:29:49
【问题描述】:

由于某种原因,我的应用程序池在几天内不断崩溃。最大的问题是我的管理事件中没有关于此池的错误或警告的日志。 (其他池中有几个警告,但只有这个池不断崩溃)。我所做的更改只有在我等待几天后才能生效时才能进行测试。

我试图让我的代码回到没有出现问题的阶段,但这似乎没有帮助。

大多数崩溃发生在站点不是很忙的时候,尽管 IIS 不会因为不活动而将其关闭。

Windows 服务器 2008 R2 (SP 1), IIS 构建 7.5.76, 乌姆布拉科, sql server 2008

IIS 日志:仅显示池的一些回收(每 3 小时一次) 快速故障检测:禁用

我应该从哪里开始解决这个问题?

【问题讨论】:

  • 您是否尝试过查看 IIS 日志?
  • 你检查过EventViewer吗?
  • IIS 日志只显示池的回收。使用事件查看器,您是指我的管理事件?我的应用程序使用的内存不大,也不会增加。这是否排除了内存泄漏?还是我应该以不同的方式检查?
  • “系统”事件日志(管理工具 -> 事件查看器)下的任何内容?

标签: c# sql-server-2008 iis iis-7 iis-7.5


【解决方案1】:

标准方法是开始制作跟踪日志文件。在应用程序的每个关键点写入详细的日志消息 - 请求开始时、请求结束时、中间某处、执行 DB 操作时等。日志文件在一天结束时可能会占用千兆字节,但您可以暂时负担得起。然后,当它再次崩溃时,检查日志文件以查看它在崩溃之前所做的最后一件事是什么。如果没有足够的详细信息,请添加更多日志记录并重复。

【讨论】:

    【解决方案2】:

    除非禁用,否则 WER(Windows 错误报告)应该会为您生成故障转储。崩溃报告的默认位置是 c:\ProgramData\Microsoft\Windows\WER\ReportQueue\ ,但据我所知,崩溃的 Windows 事件日志条目包含转储文件的完整路径(应用程序事件日志)。将其弹出到您的 VS 中并检查出了什么问题。

    您也可以尝试安装 DebugDiag,但我个人强烈不建议在生产服务器上使用它,因为它会以不可逆的方式以不可逆的方式影响其他应用程序,从而出于自身目的搞砸 WER 配置。

    【讨论】:

      【解决方案3】:

      我会首先在不同的应用程序池上运行风险应用程序,以尽量减少影响。
      有一个 iss 属性可以在 x 分钟内发生 5 个错误后阻止应用程序池重新启动。
      您可以尝试增加此设置,它应该让您了解这种情况发生的频率,以及一旦出错是否会继续出错。
      如果它是 wcf 服务,您可以启用跟踪日志(记录很多,甚至可能是您的错误)。

      至于要看的地方,我建议检查堆栈溢出和多线程代码。
      这两者都可能导致事件日志不包含任何信息的情况。

      【讨论】:

      • 谢谢。 - 应用程序有自己的池, - 快速故障检测被禁用 - 将尝试跟踪日志(虽然另一个谜是当崩溃发生一个小时时,现场没有用户活动,它是否也会跟踪 IIS 中可能出现的问题?) 我将研究多线程代码和堆栈溢出。
      • 您能解释一下您在应用程序池崩溃时看到的情况吗?通常,应用程序池会在 20 分钟不活动后闲置,也许它不会崩溃但无法启动?
      • 不幸的是 IIS 似乎没有注意到任何事情,一切看起来都很正常,我只需要重新启动池。池不会闲置,因为我有一个正常运行时间机器人每 5 分钟加载一次。谢谢
      • IIS 可能没有注意到一些东西,但我猜有人注意到了一些东西,或者这个主题不存在? :) 你的机器人收到错误了吗?您的数据库记录器没有添加任何记录吗?该网站是否提供超时?您如何看待“崩溃”?
      猜你喜欢
      • 2013-11-12
      • 1970-01-01
      • 2013-09-20
      • 1970-01-01
      • 2011-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多