ASP.NET MVC为什么我的应用程序会继续重启?

时间:2011-03-16 01:53:03

标签: asp.net asp.net-mvc restart diagnostics

我有一个ASP.NET MVC网站,每天在Server Intellect的共享主机平台上获得大约6500次点击。我一直在日志中看到app重启,我无法弄清楚原因。

我在这里阅读了Scott Gu的文章:http://weblogs.asp.net/scottgu/archive/2005/12/14/433194.aspx 并实现了这项技术,这是我日志中显示的内容:

Application Shutdown: 
_shutDownMessage=HostingEnvironment initiated shutdown 
HostingEnvironment caused shutdown    
_shutDownStack=at
System.Environment.GetStackTrace(Exception e, Boolean needFileInfo)     at 
System.Environment.get_StackTrace()     at 
System.Web.Hosting.HostingEnvironment.InitiateShutdownInternal()     at 
System.Web.Hosting.HostingEnvironment.InitiateShutdown()     at 
System.Web.Hosting.PipelineRuntime.StopProcessing()

似乎每五分钟就会发生一次。

还有其他方法可以调试吗?

更新:以下是Softion提到的应用程序池设置:

CPU

  • 限制:0
  • 限制操作:无操作
  • 限制间隔:5分钟

流程模型

  • 空闲超时:20分钟
  • Ping最长响应时间:90秒
  • 启动时间限制:90秒

快速失败保护

  • 已启用:正确
  • 失败间隔:5分钟

回收

  • 专用内存限制:100 MB
  • 常规时间间隔:1740分钟(29小时)
  • 请求限制:0
  • 具体时间:无
  • 虚拟内存限制:0

4 个答案:

答案 0 :(得分:30)

您可以通过HostingEnvironment轻松获取关闭的原因。 您阅读了Scott Gu的文章,但您错过了它的评论。

     var shutdownReason = HostingEnvironment.ShutdownReason;

Shutdown reason codes

如果原因是HostingEnvironment,请检查控制回收的IIS应用程序池参数。我在每个附近放了一个红点。请查看您自己副本底部帮助框中的说明以获取完整信息。

您可以要求您的提供商为您提供applicationHost.config文件,其中设置了所有这些参数。他们在C:\ Windows \ System32 \ inetsrv \ config中找到它。我相信你也可以使用一些.NET API来获取它们。

enter image description here

对于每天6500次点击,这是一个非常低的命中率,我打赌“空闲超时”设置为500万。

更新(将评论移至此处// jgauffin)

  • CPU限制0 =禁用。
  • 流程模型空闲超时:20分钟(没有请求的20分钟回收您的应用)。
  • 启用快速失败保护(5mn)。您需要知道最大故障数。如果您的应用程序在5mn内引发超过此异常计数,我们将进行回收。
  • 专用内存限制:100 MB。是的你应该描述,这是一个下限。
  • 常规时间间隔:1740分钟(29小时):每29小时回收一次。
  • 请求限制:0(禁用)。
  • 虚拟内存限制:0(禁用)。
  • 启用快速失败保护(5mn)。您需要最大故障数。如果您的应用程序在5mn内投掷超过此异常计数,则会进行回收。如果它每隔500万回收一次,这应该是要检查的东西。在辅助工作线程中应该有0个未处理的异常。将代码包装到try catch中。

答案 1 :(得分:3)

重新更新:

设置要求提供者帮助,但是更好地询问有关重启原因的信息,就像我在原始答案中提到的那样,即我在orig答案中提到的重启的实际日志条目。从那些你可以特别知道被触发的东西,我看到发生了一个达到不同极限。

你真的必须:

  

使用a配置您的应用程序   实际数量的测试数据


我的资金达到了您的托管服务提供商设置的资源限制。

在没有目标的情况下疯狂进行优化之前,请联系您的提供商并要求他们为您提供有关重启的信息。

典型的回收:

  • 闲置x时间/ 15分钟
  • 超过x内存量/ 200 MB
  • 超过x%处理器的时间/ 70分钟超过1分钟
  • 每日回收

一旦你知道了这个案子,就必须找出拿走这些资源的内容。为此,您必须使用实际数量的测试数据来分析您的应用程序。了解它是内存还是处理器有助于了解要查找的内容。

答案 2 :(得分:1)

IIS是否设置为经常回收应用程序池?

应用程序池中是否存在某种失控的内存泄漏?

答案 3 :(得分:1)

这需要了解一下你的应用程序在这里做了多少可能导致应用程序重启/重置甚至关闭的事情列表

  • StackOverflowException
  • OutOfMemoryException异常
  • 崩溃线程的任何未处理的异常
  • CodeContracts在发生合同违规时使用Environment.FailFast

如果您可以使用附加的调试器重现问题,则可以很容易地跟踪异常,您可以进入Visual Studio并在抛出未被用户代码捕获的所有异常时启用它们。它有时会揭示出其他隐藏起来的有趣内容。