如何使用PerfView分析ASP.NET Core Web API性能及App Insight栈追踪?
用PerfView测试ASP.NET Core Web API接口性能
步骤概览
- 准备环境:确保API所在服务器安装了对应版本的.NET Core运行时,将PerfView下载到服务器本地(远程捕获延迟较高,优先本地部署)。
- 配置捕获会话:
- 打开PerfView,点击顶部菜单
Collect->Collect。 - 在
Additional Providers输入框中添加关键提供者:Microsoft.AspNetCore、System.Net.Http,若用到EF Core则追加Microsoft.EntityFrameworkCore。 - 根据测试目标勾选选项:排查CPU瓶颈选
Collect CPU Samples,分析内存分配选Collect GC Heap Allocations,定位线程阻塞问题选Collect Thread Time。 - 设置输出目录后,点击
Start Collection启动捕获。
- 打开PerfView,点击顶部菜单
- 模拟流量压测:用wrk、批量curl脚本或Postman集合Runner对目标API发起持续请求,模拟真实业务流量(注意压测强度不要超出服务器负载能力)。
- 停止捕获并分析:压测结束后点击
Stop Collection,PerfView会生成.etl日志文件。重点查看:CPU Stacks:按CPU占比排序,定位热点方法(比如某段业务逻辑占用大量CPU)。GC Heap Allocations:查看高频分配的对象类型、大对象堆(LOH)分配情况,排查内存泄漏或过度分配问题。Thread Time:分析线程等待、阻塞的调用栈,定位锁竞争、IO阻塞(比如慢数据库查询)的根源。
App Insight探查器 vs 服务器本地捕获:场景选择
App Insight探查器的适用场景
- 生产环境无法直接操作服务器(比如云托管的Azure App Service),无需部署额外工具,直接通过App Insight控制台查看数据。
- 快速定位偶发慢请求:自动关联请求ID与调用栈,能看到单个慢请求的全链路耗时(比如控制器方法、数据库查询、外部API调用的各自耗时)。
- 长期性能监控:统计一段时间内的请求性能趋势,结合错误率、请求量等数据,快速定位性能退化的时间点。
服务器本地运行PerfView的优势
- 数据更全面:能捕获进程级的所有细节,包括非托管代码调用、系统内核级操作(比如磁盘IO、网络栈),适合排查复杂性能问题。
- 无采样限制:App Insight默认会对请求采样,而本地捕获能获取100%的请求数据,适合精准分析特定场景下的性能瓶颈(比如高并发下的CPU飙升)。
- 自定义配置灵活:可以根据测试目标调整捕获参数,比如只捕获特定进程、过滤特定请求,针对性更强。
选择建议
- 先通过App Insight探查器快速定位问题范围:比如确定是数据库查询慢还是业务逻辑耗时高。
- 当需要深度分析根源(比如热点代码、内存泄漏、线程锁竞争)时,直接在服务器上用PerfView结合压测工具进行捕获,能得到更精准的诊断数据。
内容的提问来源于stack exchange,提问作者itsme017
相关产品推荐
相关产品推荐

