You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core 2.0自托管Azure AppService意外重启原因排查

Azure App Service上ASP.NET Core 2.0应用莫名重启?看这几个常见原因

结合你遇到的情况——本地运行完全稳定,到Azure上就意外重启,活动日志里找不到主动重启的记录,还带着几个持续运行的IHostedService——我整理了几个最可能的诱因,你可以顺着排查:

1. 资源超限被平台强制重启

Azure App Service有一套资源阈值保护机制,一旦你的应用消耗的资源超过配置的配额,平台会悄悄重启实例,这类操作通常不会在活动日志里留明确的“重启”记录,但能从指标或诊断日志里找到线索:

  • 内存炸了:如果你的IHostedService存在内存泄漏,或者处理大量数据时内存占用飙升,超过App Service计划的内存上限,平台就会强制重启。去Azure门户的「应用服务」→「指标」里看Memory Working Set或Memory Percentage的波动,有没有接近100%的峰值。
  • CPU跑满:长时间CPU占用超过90%也会触发回收机制,同样看CPU Percentage指标就能确认。
  • 磁盘空间不足:要是应用生成了大量日志、临时文件,把App Service的本地磁盘(D:\home)塞满了,也会导致重启。可以通过Kudu控制台(https://<你的应用名>.scm.azurewebsites.net/DebugConsole)查看磁盘使用情况,或者在「诊断与解决问题」里用「磁盘空间分析器」扫一下。

2. IHostedService里的未处理异常搞崩了进程

本地运行正常不代表Azure环境下也没问题——网络延迟、依赖服务波动、权限限制这些差异,都可能让IHostedService里冒出未捕获的异常,直接把整个.NET进程搞崩,然后App Service会自动重启进程恢复服务:

  • 先查应用日志:确保你的IHostedService里所有可能抛异常的代码都加了try-catch,而且把异常信息写到日志里(比如用Serilog、NLog或者内置的ILogger)。可以去Kudu的LogFiles目录翻日志,或者在Azure门户里开「应用日志记录」,把日志输出到Blob存储或Log Analytics里看。
  • 再看Windows事件日志:对于Windows实例,进程崩溃会记录在系统事件日志里。通过Kudu控制台打开EventVwr.msc,去「Windows日志」→「应用程序」里找错误事件,就能看到进程崩的详细原因。

3. 平台后台维护或更新

Azure会定期给App Service的底层基础设施更新(比如打系统补丁、更.NET运行时),这类操作可能会导致实例重启。大的更新会提前通知,但一些小更新可能不会在活动日志里留明显记录:

  • 去Azure门户的「应用服务」→「概述」→「服务健康」里看看,近期你这个区域有没有维护通知。
  • 打开「诊断与解决问题」里的「平台更新日志」,核对一下重启时间是不是和更新时间对上了。

4. 隐性的配置或部署操作触发重启

有些看似无关的操作,其实会间接让应用重启:

  • 应用设置偷偷变了:哪怕你没手动重启,但如果App Settings、Connection Strings被自动更新了(比如CI/CD管道同步、Azure Key Vault自动刷新),App Service会自动重启加载新配置。去「应用设置」里看修改历史,有没有和重启时间匹配的变更。
  • 部署槽的连锁反应:如果用了部署槽,哪怕没主动交换,槽的配置更新之类的操作也可能影响生产槽的实例。
  • 临时文件被清理:App Service会定期清临时目录(D:\local),要是你的IHostedService依赖这个目录里的文件,清理时出了异常也可能搞崩进程。

5. ASP.NET Core 2.0的旧版本bug

ASP.NET Core 2.0已经停止官方支持了,本身存在一些和托管服务相关的已知bug:

  • 比如IHostedService的启动/停止逻辑在某些边缘场景下会导致进程挂起或崩溃,后续2.1及以上版本都修复了这些问题。如果能升级的话,建议更到.NET Core 2.1或更高的长期支持版本,说不定问题直接就没了。
  • 还有可能是Program.cs或Startup.cs里的配置在Azure环境下触发了异常,比如依赖注入的生命周期配错了,导致服务重复初始化、资源耗尽。

快速排查步骤

  1. 先看「指标」,确认内存、CPU、磁盘有没有超限;
  2. 启用详细日志,重点查IHostedService相关的异常;
  3. 通过Kudu看Windows事件日志,找进程崩溃的具体原因;
  4. 检查应用设置和部署历史,有没有隐性的变更;
  5. 能升级的话,试试更到高版本的.NET Core。

内容的提问来源于stack exchange,提问作者AsValeO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 02:28:10