本地IIS服务器使用Application Insights排查Blazor Server内存泄漏问题
本地IIS环境Application Insights日志查看方案
默认配置下Application Insights SDK的遥测数据默认上报到Azure云端,本地开发时能查看是因为Visual Studio内置了本地遥测接收器捕获了数据,生产IIS环境无相关接收端时数据会直接丢弃,你可以按以下两种方式处理:
- 搭建本地Application Insights仿真服务,修改项目配置里的
ApplicationInsights:ConnectionString参数,指向本地仿真服务的地址,生产端所有采集的日志、性能指标都会上报到本地仿真服务,直接访问仿真服务的Web面板即可查看全量数据。 - 配置App Insights遥测数据本地持久化:在项目启动类中通过
AddApplicationInsightsTelemetryProcessor方法注册自定义遥测处理器,将所有App Insights采集的数据同步输出到本地日志文件,配合Serilog、NLog等日志组件做持久化存储,直接在生产服务器的日志存储路径下查看日志即可。
更高效的Blazor Server内存泄漏排查方案
排查内存泄漏问题直接抓取进程转储分析的效率远高于查看日志,你可以使用以下方案快速定位问题:
- 用Windows自带工具抓取进程转储:首先在IIS管理器中确认目标应用对应的应用池,在任务管理器「详细信息」 tab 中找到对应PID的
w3wp.exe进程,右键选择「创建转储文件」,生成的dmp文件下载到本地开发机后,用Visual Studio打开并选择「调试托管内存」功能,即可查看托管堆对象分布、未释放对象的引用链,直接定位泄漏源。 - 用dotnet官方诊断工具操作:在生产服务器上安装
dotnet-dump全局工具,执行dotnet-dump collect -p [进程PID]命令即可一键抓取转储文件,你可以直接在服务器上执行dotnet-dump analyze [转储文件路径]做在线分析,也可以把转储文件拉取到本地用PerfView、VS等工具做深度分析。 - 优先排查Blazor Server常见泄漏点:长期存活的
CancellationTokenSource未释放、单例服务中注入了Scoped服务导致生命周期被提升、JS互操作注册的前端事件监听器页面销毁时未解绑、大量未回收的RenderFragment实例、大文件处理时未用流式操作导致大对象堆碎片化,这些场景可以在分析转储时优先匹配验证。
内容的提问来源于stack exchange,提问作者Greg Gum
相关产品推荐
相关产品推荐

