我在 IIS/Kestrel(反向代理配置)中运行的 Windows Server 2016 VM 上有几个 ASP.NET Core 网站。
其中一些网站在白天有一些不活动的时间。因此,它们的应用程序池被终止(我希望保留它以使用更少的资源)。问题是冷启动需要很长时间。然后我设置了这些应用程序池,而Suspend
不是Terminate
在空闲后。
自那时起,这些网站不仅更长在冷启动时启动,但也有一些冷启动时出现 503 错误。一旦启动,它们就可以正常工作。但暂停的应用程序池第一次出现错误几乎总是 503。正文包含一条消息,如“服务不可用”,但经过翻译(似乎不是 UTF-8,因为字符未正确呈现)。我不确定这条消息是来自 IIS 还是 Kestrel。
在查找失败请求跟踪之后,我发现了这一点:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
<Provider Name="WWW Server" Guid="{3A2A4E84-4C21-4981-AE10-3FDA0D9B0F83}"/>
<EventID>0</EventID>
<Version>1</Version>
<Level>3</Level>
<Opcode>16</Opcode>
<Keywords>0x100</Keywords>
<TimeCreated SystemTime="2019-10-24T15:13:51.803Z"/>
<Correlation ActivityID="{80000C51-0003-BC00-B63F-84710C7967BB}"/>
<Execution ProcessID="13656" ThreadID="17072"/>
<Computer>[REDACTED]</Computer>
</System>
<EventData>
<Data Name="ContextId">{80000C51-0003-BC00-B63F-84710C7967BB}</Data>
<Data Name="ModuleName">AspNetCoreModuleV2</Data>
<Data Name="Notification">128</Data>
<Data Name="HttpStatus">503</Data>
<Data Name="HttpReason">Server has been shutdown</Data>
<Data Name="HttpSubStatus">0</Data>
<Data Name="ErrorCode">2147943515</Data>
<Data Name="ConfigExceptionInfo"></Data>
</EventData>
<RenderingInfo Culture="en-US">
<Opcode>MODULE_SET_RESPONSE_ERROR_STATUS</Opcode>
<Keywords>
<Keyword>RequestNotifications</Keyword>
</Keywords>
<freb:Description Data="Notification">EXECUTE_REQUEST_HANDLER</freb:Description>
<freb:Description Data="ErrorCode">A system shutdown is in progress.
(0x8007045b)</freb:Description>
</RenderingInfo>
<ExtendedTracingInfo xmlns="http://schemas.microsoft.com/win/2004/08/events/trace">
<EventGuid>{002E91E3-E7AE-44AB-8E07-99230FFA6ADE}</EventGuid>
</ExtendedTracingInfo>
</Event>