暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

asp.net core 应用部署到iis后被随机重启问题解决

709

问题现象及排查结果

在一次排查业务系统执行中断原因排查过程中发现.net core kestrel服务器自动重启的日志,一开始以为是代码层面问题,反复排查一段时间后,无果,看了下windows 应用程序日志,发现有:Sent shutdown HTTP message to process '5180' and received http status '202'. 类似的日志消息,最终将该消息复制到网上搜索了下,发现是iis应用程序池的一些设置导致的问题。

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/?view=aspnetcore-6.0&tabs=windows#hosting-models 微软官方文档中也说了,当asp.net core站点使用IIS 进程外部署方式部署时,由IIS AspNetCore Module 来处理站点进程管理,当站点进程被shutdown或者崩溃后,该模块会自动重启站点,这也就是为什么应用被shutdown后,还能重启。

 

解决方案

  • 将站点应用程序池的 固定时间间隔(分钟) 设置为0,该配置表示间隔多少分钟重启一次站点,0表示不重启。

  • 将 闲置超时(分钟) 时间设置为0(表示站点多久没有收到请求就终止,设为0表示不判断超时)

  • 重启IIS引用程序池和站点

 

以下是一些关于进程内、进程外部署的一些说明。

如何判断是进程内,还是进程外部署呢?

只需要在代码中增加以下代码,如果返回的是w3wp
/iisexpress

则表示iis进程内部署,如果返回的是dotnet,则是进程外部署。

Process.GetCurrentProcess().ProcessName

 

IIS 进程外部署、进程内部署说明

IIS进程外部署:表示单独创建一个进程去处理请求,进程内包含Kestrel服务器,对传入的请求进行监听,当请求到达IIS后,通过AspNetCore Module 这个模块转发请求到Kestrel服务器,Kestrel再转给asp.net core 应用代码进行处理。

IIS 进程内部署:表示asp.net core 应用代码运行在iis 工作进程内,而不是单独启动一个独立进程去处理请求,也不启动Kestrel服务器,而是IIS收到请求后,直接把请求转发给asp.net core 代码。


文章转载自跟着阿笨一起玩NET,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论