IIS 抛出 ThreadAbortException 并回收 worker 的可能原因是什么,IIS 日志记录 "IIS configuration change"?
What are the possible causes for IIS to throw a ThreadAbortException and recycle the worker, with IIS logging "IIS configuration change"?
我开始在 Appharbor 上托管的 .Net MVC 网络应用程序中看到错误,而后台线程是 运行 - 经过仔细分析 - 我无法找出原因。
首先,我注意到的异常是ThreadAbortException
。
然而,这实际上只是表示线程正在被杀死。在线程被杀死之前,可以看到 IIS 创建了一个新的 worker,并在同一台机器上调用了 Application_Start
。新应用程序启动后 运行,IIS 会终止旧应用程序并按预期处理新请求。
同时,IIS 记录一条消息:
ShutDown Message: IIS configuration change
HostingEnvironment initiated shutdown
HostingEnvironment caused shutdown
ShutDown Stack: at System.Environment.GetStackTrace(Exception e, Boolean needFileInfo)
at System.Environment.get_StackTrace()
at System.Web.Hosting.HostingEnvironment.InitiateShutdownInternal()
at System.Web.Hosting.HostingEnvironment.InitiateShutdownWithoutDemand()
at System.Web.Hosting.PipelineRuntime.StopProcessing()
在 .Net Health Monitor Logging 中,您得到:
Message: Application is shutting down. Reason: Configuration changed.
Event Detail Code: 50004
快速 google 揭示了我怀疑是错误原因的源代码:
if (!HostingEnvironment.StopListeningWasCalled && !HostingEnvironment.ShutdownInitiated) {
// If GL_STOP_LISTENING wasn't triggered, the reset is likely due to a configuration change.
HttpRuntime.SetShutdownReason(ApplicationShutdownReason.ConfigurationChange, "IIS configuration change");
}
来源:https://github.com/Microsoft/referencesource/blob/master/System.Web/Hosting/IPipelineRuntime.cs
我的第一个想法是检查 bin 文件夹和主应用程序目录中文件更改的时间戳 - 然而,在没有任何文件更改的情况下抛出此错误。鉴于它只发生在 Appharbor 上,我无法附加到进程并以这种方式进行调试。我还监控了内存使用情况,没有发现任何问题。
源代码声明:
If GL_STOP_LISTENING wasn't triggered, the reset is likely due to a
configuration change.
因此,如果 web.config/其他配置文件未更改,是什么 else 可能导致错误和应用程序回收?
原因很多,在此helpful blog entry一一列举。
- 应用程序池设置
- machine.config
的 processModel 元素
- 内存限制
- 请求限制
- 超时
当您的 IIS 应用程序配置或代码发生某些(任何)变化时,IIS 配置就会发生变化。示例:
- web.confg
的变化
- 更改任何 dll、aspx 等...
在任何一种情况下,IIS 应用程序都会回收。此外,默认情况下,IIS 将每 29 小时回收一次您的进程,但这可能不会被调用 "IIS configuration change"
看起来这是 Microsoft 的一个错误。
Unexpected ASP.Net application shutdown after many App_Data file
changes occur on a server that is running Windows Server 2012 R2
Hotfix: https://support.microsoft.com/en-us/kb/3052480
Last Review: 09/08/2015 16:29:00
应用此修补程序后,错误消失了!
我开始在 Appharbor 上托管的 .Net MVC 网络应用程序中看到错误,而后台线程是 运行 - 经过仔细分析 - 我无法找出原因。
首先,我注意到的异常是ThreadAbortException
。
然而,这实际上只是表示线程正在被杀死。在线程被杀死之前,可以看到 IIS 创建了一个新的 worker,并在同一台机器上调用了 Application_Start
。新应用程序启动后 运行,IIS 会终止旧应用程序并按预期处理新请求。
同时,IIS 记录一条消息:
ShutDown Message: IIS configuration change
HostingEnvironment initiated shutdown
HostingEnvironment caused shutdown
ShutDown Stack: at System.Environment.GetStackTrace(Exception e, Boolean needFileInfo)
at System.Environment.get_StackTrace()
at System.Web.Hosting.HostingEnvironment.InitiateShutdownInternal()
at System.Web.Hosting.HostingEnvironment.InitiateShutdownWithoutDemand()
at System.Web.Hosting.PipelineRuntime.StopProcessing()
在 .Net Health Monitor Logging 中,您得到:
Message: Application is shutting down. Reason: Configuration changed.
Event Detail Code: 50004
快速 google 揭示了我怀疑是错误原因的源代码:
if (!HostingEnvironment.StopListeningWasCalled && !HostingEnvironment.ShutdownInitiated) {
// If GL_STOP_LISTENING wasn't triggered, the reset is likely due to a configuration change.
HttpRuntime.SetShutdownReason(ApplicationShutdownReason.ConfigurationChange, "IIS configuration change");
}
来源:https://github.com/Microsoft/referencesource/blob/master/System.Web/Hosting/IPipelineRuntime.cs
我的第一个想法是检查 bin 文件夹和主应用程序目录中文件更改的时间戳 - 然而,在没有任何文件更改的情况下抛出此错误。鉴于它只发生在 Appharbor 上,我无法附加到进程并以这种方式进行调试。我还监控了内存使用情况,没有发现任何问题。
源代码声明:
If GL_STOP_LISTENING wasn't triggered, the reset is likely due to a configuration change.
因此,如果 web.config/其他配置文件未更改,是什么 else 可能导致错误和应用程序回收?
原因很多,在此helpful blog entry一一列举。
- 应用程序池设置
- machine.config 的 processModel 元素
- 内存限制
- 请求限制
- 超时
当您的 IIS 应用程序配置或代码发生某些(任何)变化时,IIS 配置就会发生变化。示例:
- web.confg 的变化
- 更改任何 dll、aspx 等...
在任何一种情况下,IIS 应用程序都会回收。此外,默认情况下,IIS 将每 29 小时回收一次您的进程,但这可能不会被调用 "IIS configuration change"
看起来这是 Microsoft 的一个错误。
Unexpected ASP.Net application shutdown after many App_Data file changes occur on a server that is running Windows Server 2012 R2
Hotfix: https://support.microsoft.com/en-us/kb/3052480
Last Review: 09/08/2015 16:29:00
应用此修补程序后,错误消失了!