关于c#:一个应用程序池使IIS 7挂起

One application pool keeps hanging IIS 7

由于某种原因,我的应用程序池在几天内一直崩溃。最大的问题是,关于该池的管理事件中没有关于错误或警告的日志。 (在其他池中有几个警告,但只有这个池会不断崩溃)。如果我等了几天,我所做的更改只有在它们起作用的情况下才能进行测试。

我试图将我的代码恢复到没有发生问题的阶段,但这似乎无济于事。

当站点不是很忙时,大多数崩溃都会发生,尽管不是因为IIS处于非活动状态而将其关闭以使其处于非活动状态。

Windows Server 2008 R2(SP 1),
IIS内部版本7.5.76,
Umbraco,
SQL Server 2008

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

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


除非被禁用,否则

WER(Windows错误报告)应该已经为您进行了故障转储。崩溃报告的默认位置为c:\\\\ ProgramData \\\\ Microsoft \\\\ Windows \\\\ WER \\
eportQueue \\\\,但据我所记得,崩溃的Windows事件日志条目包含转储文件(应用程序事件日志)的完整路径。将其弹出到VS中,然后检查出了什么问题。

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


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


我将从在其他应用程序池上运行风险应用程序开始,以最大程度地减少影响。
有一个iss属性可在x分钟内发生5个错误后阻止应用程序池重新启动。您可以尝试增加此设置,它应该使您了解这种情况的发生频率,以及一旦出错就会一直出错。
如果是wcf服务,则可以启用跟踪日志(日志很多,甚至可能是您的错误)。
至于寻找的地方,我建议您检查一下堆栈溢出和多线程代码。这两种情况都可能导致事件日志中不包含任何信息的情况。