【问题标题】:IIS app pool recycling randomly every few secondsIIS 应用程序池每隔几秒随机回收一次
【发布时间】:2011-04-03 04:11:29
【问题描述】:

我需要确定应用程序池回收的原因。 (没有明显的原因)

有什么方法可以在 global.asax 文件的 application_end 子中确定这一点?

我已经在那里进行了一些基本的登录,所以我知道它何时关闭,但我不知道为什么。

(这没什么明显的......似乎每几个请求某些操作都会导致应用程序结束。我已经关闭了所有正常的回收原因,例如超时、内存检查等等等。相同的代码在不同的服务器上运行良好,所以我确定这个设置有问题,但是什么?...)

【问题讨论】:

  • 也许我应该澄清一下......我相信应用程序池正在回收,原因如下:1)应用程序哈希中的数据正在消失。换句话说,如果我写信给 Application("foobar") = "bloz" 那么在下一个 http 帖子中 Application("foobar") 是空的。 2) 我正在记录对 Application_End 的调用。但是我想我不知道这是否真的意味着应用程序池正在回收或什么。

标签: iis application-end


【解决方案1】:

添加自定义日志记录您不必产生开销,ASP.NET 2.0 运行状况监控可以为您完成这项工作。您可以添加以下配置,该配置将在事件日志中记录事件以及应用程序池重启的原因。

要打开 ASP.NET 运行状况监控,您可以编辑“主”web.config 文件,该文件通常位于 %systemroot%\microsoft.net\framework\v2.0.50727\config

  • 首先,在masterweb.config中寻找<healthMonitoring>

  • healthMonitoring 节点内,找到<rules> 节点

  • 在规则内部,添加以下内容:

    <add name="Application Lifetime Events Default"       
         eventName="Application Lifetime Events"       
         provider="EventLogProvider"       
         profile="Default"       
         minInstances="1"       
         maxLimit="Infinite"       
         minInterval="00:01:00"       
         custom="" /> 
    

重现该问题并在应用程序事件日志中查看 ASP.NET 2.0 的来源。这应该记录应用程序池被回收的原因。

【讨论】:

  • 上面好像少了一些说明?无论如何,请参阅上面的我的 cmets。当我手动回收应用程序池时看到事件真的很奇怪,但没有别的。
  • 谢谢。这行得通。问题是我的一个白痴错误。不小心在 AppCode 目录中动态创建文件,导致应用程序重新编译。你的回答有帮助。谢谢
【解决方案2】:

尝试查看事件日志。当应用程序池回收时,会在日志中写入一个条目以及原因。

以下链接描述了您将在 IIS 7.5 的事件日志中看到的错误代码 http://technet.microsoft.com/en-us/library/dd349270(WS.10).aspx

【讨论】:

  • 不...我已经按照所有说明进行操作,并打开了有关 iis 回收的所有复选框。除了手动回收之外,我没有看到任何事件。
【解决方案3】:

如果您的问题机器的事件查看器中还没有日志条目,您可以修改 IIS 以记录所有应用程序池回收。

下面是微软关于如何做到这一点的文章

http://support.microsoft.com/kb/332088

【讨论】:

  • 已经这样做了,还没有事件!当我手动回收应用程序池时,我确实看到了事件,但没有看到任何其他回收。
猜你喜欢
  • 2012-05-20
  • 1970-01-01
  • 2023-03-23
  • 2011-09-20
  • 1970-01-01
  • 1970-01-01
  • 2015-09-02
  • 2010-12-17
  • 1970-01-01
相关资源
最近更新 更多