当前位置: 首页 > news >正文

DotCore进程CPU飙高跟踪处理方案

目录

一、安装dotnet-trace

二、 基本用法:收集性能数据

三、在服务器上直接分析

四、下载到本地分析

五、使用 Visual Studio 分析

六、分析报告解读

🔥 Hot Paths (热点路径)

📊 Functions (函数视图)

🧵 Call Tree (调用树)

📈 CPU Usage (CPU使用率)

七、实际分析示例

八、高级用法

九、替代方案:使用 SpeedScope

十、常见问题排查

十一、分析建议


一、安装dotnet-trace

# 安装或更新 dotnet-trace 工具
dotnet tool install --global dotnet-trace
# 或者更新到最新版本
dotnet tool update --global dotnet-trace

二、 基本用法:收集性能数据

# 最简单的方式 - 收集30秒的CPU分析数据
dotnet-trace collect -p 12115 --duration 00:00:30 --output trace.nettrace# 更详细的CPU分析(推荐)
dotnet-trace collect -p 12115 \--providers Microsoft-DotNETCore-SampleProfiler \--duration 00:00:30 \--output high_cpu_trace.nettrace# 包含更多诊断信息【亲测好用!!!】
dotnet-trace collect -p 12115 \--providers Microsoft-DotNETCore-SampleProfiler,Microsoft-Windows-DotNETRuntime:0x1:4 \--duration 00:00:30 \--output detailed_trace.nettrace
  • 参数说明

  • -p 12115: 指定进程ID

  • --duration 00:00:30: 收集30秒数据

  • --output: 输出文件名

  • --providers: 指定要收集的数据类型

    • Microsoft-DotNETCore-SampleProfiler: CPU采样分析

    • Microsoft-Windows-DotNETRuntime: 运行时事件

三、在服务器上直接分析

# 收集数据
dotnet-trace collect -p 12115 --duration 00:00:30 --output /tmp/trace.nettrace# 使用PerfView查看(如果已安装)
perfview /tmp/trace.nettrace

四、下载到本地分析

如果服务器没有图形界面,需要下载文件到本地:

bash

# 在服务器上生成文件
dotnet-trace collect -p 12115 --duration 00:00:30 --output /tmp/trace.nettrace# 使用scp下载到本地(从本地机器执行)
scp user@yourserver:/tmp/trace.nettrace ./

五、使用 Visual Studio 分析

  1. 打开 Visual Studio (2019 或更高版本)

  2. 菜单 → 文件 → 打开 → 文件

  3. 选择下载的 .nettrace 文件

  4. 等待分析完成

六、分析报告解读

在 Visual Studio 中查看以下几个关键标签页:

🔥 Hot Paths (热点路径)

  • 显示消耗CPU最多的调用路径

  • 可以看到哪个方法调用链最耗时

📊 Functions (函数视图)

  • 按CPU时间排序的所有函数

  • 查看"独占时间"和"包含时间"

    • 独占时间: 方法自身代码消耗的时间

    • 包含时间: 方法及其调用的所有子方法消耗的时间

🧵 Call Tree (调用树)

  • 完整的调用层次结构

  • 可以展开查看具体调用关系

📈 CPU Usage (CPU使用率)

  • 时间线上的CPU使用情况

  • 可以关联特定时间点的事件

七、实际分析示例

假设分析后发现:

  1. 热点方法MyBusinessService.ProcessData()

  2. 占用CPU: 45% 的总CPU时间

  3. 调用栈:

    • MyBusinessService.ProcessData() - 35%

    • JsonSerializer.Deserialize() - 10%

    • Database.Query() - 5%

八、高级用法

# 实时监控模式
dotnet-trace collect -p 12115 --format speedscope --output realtime.json# 指定采样频率(默认为1ms)
dotnet-trace collect -p 12115 --profile cpu-sampling --interval 5ms# 同时收集异常信息
dotnet-trace collect -p 12115 \--providers Microsoft-DotNETCore-SampleProfiler,Microsoft-Windows-DotNETRuntime:0x8:4

九、替代方案:使用 SpeedScope

# 生成 speedscope 格式(在线分析)
dotnet-trace collect -p 12115 --format speedscope --output trace.json# 然后在 https://www.speedscope.app/ 上传分析

十、常见问题排查

如果遇到权限问题:

# 可能需要提升权限
sudo dotnet-trace collect -p 12115 ...# 或者检查进程用户
ps -ef | grep 12115

十一、分析建议

  1. 选择业务高峰期收集数据

  2. 收集时间足够长(至少30秒)

  3. 多次收集对比分析

  4. 关注独占时间高的方法

  5. 查看调用频率高的方法


文章转载自:

http://y2Iq0YbM.pcrzf.cn
http://Z7gHl2w2.pcrzf.cn
http://SKuBiQcH.pcrzf.cn
http://BBfMFok5.pcrzf.cn
http://m7id9tLI.pcrzf.cn
http://16h4Tsbo.pcrzf.cn
http://a6wXZhXR.pcrzf.cn
http://t9GIWVt3.pcrzf.cn
http://WYd6lJ6T.pcrzf.cn
http://wMi4X3iF.pcrzf.cn
http://JqT7NFGk.pcrzf.cn
http://l9ZmUTmc.pcrzf.cn
http://wHxUcVrq.pcrzf.cn
http://AH2pxzmz.pcrzf.cn
http://IPUJ9hRQ.pcrzf.cn
http://kTrJi9h6.pcrzf.cn
http://pPaEHobd.pcrzf.cn
http://ruODqJCJ.pcrzf.cn
http://Z0qMmFP6.pcrzf.cn
http://jP4cnQBg.pcrzf.cn
http://j6pbkLZm.pcrzf.cn
http://sZcBwjwJ.pcrzf.cn
http://BJWqxMoX.pcrzf.cn
http://vIBk7KX9.pcrzf.cn
http://VtZqtzbf.pcrzf.cn
http://d1ijdVe0.pcrzf.cn
http://Y79UJ9X5.pcrzf.cn
http://cX6VfUhA.pcrzf.cn
http://3ZFpatFd.pcrzf.cn
http://9uyMSzQD.pcrzf.cn
http://www.dtcms.com/a/387612.html

相关文章:

  • PantherX2黑豹X2 armbian 编译rkmpp ffmpeg 实现CPU视频转码
  • 2、Logstash与FileBeat详解以及ELK整合详解(Logstash安装及简单实战使用)
  • ENVI系列教程(六)——自动采集控制点的 RPC 正射校正
  • 多可见光线索引导的热红外无人机图像超分辨率重建
  • CE-RED 是什么?
  • Win10上VScode 进行ssh登录服务器时免密登录
  • AWS Global Accelerator 详解:比传统 CDN 更快的全球加速方案
  • Apollo学习之预测模块二
  • Ubuntu安装qbittorrent-nox并启用远程访问webui
  • Qt QLegend详解
  • C++ 初识
  • 从零实现 Qiankun 微前端:基座应用控制子应用路由与信息交互
  • 云函数(Serverless)深度解读
  • 设计模式概述
  • 基于 TCP 协议的 C++ 计算器项目实现:从网络通信到协议封装
  • 【分布式技术】深入理解AMQP(高级消息队列协议)
  • 海外短剧分销系统开发:技术栈选型与核心模块实现指南
  • 每日前端宝藏库 | Toastify.js ✨
  • Nuxt3:自动导入渲染模式服务器引擎生产部署模块化
  • 打造高效对账单管理组件:Vue3 + Element Plus 实现客户账单与单据选择
  • 第二章 Arm C1-Premium Core技术架构
  • Bartender 6 多功能菜单栏管理(Mac)
  • 嵌入式科普(38)C语言预编译X-Macros深度分析和实际项目代码分享
  • Docker compose 与 docker swarm 的区别
  • 【嵌入式硬件实例】-555定时器实现水位检测
  • AbMole小课堂丨R-spondin-1(RSPO1):高活性Wnt通路激活剂,如何在多种类器官/干细胞培养中发挥重要功能
  • 【C语言代码】打印九九乘法口诀表
  • vue3和element plus, node和express实现大文件上传, 分片上传,断点续传完整开发代码
  • electron-egg使用ThinkPHP项目指南
  • 温州工业自动化科技工厂如何实现1台服务器10个研发设计同时用