Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >.NET Core CLI 的性能诊断工具介绍

.NET Core CLI 的性能诊断工具介绍

原创
作者头像
全球技术精选
修改于 2021-01-08 10:04:51
修改于 2021-01-08 10:04:51
1.7K00
代码可运行
举报
文章被收录于专栏:全球技术精选全球技术精选
运行总次数:0
代码可运行

前言

开发人员的.NET Core项目上线后,经常会出现各种问题,内存泄漏,CPU 100%,处理时间长等, 这个时候就需要快速并准确的发现问题,并解决问题, 除了项目本身的日志记录外,NET Core 为我们开发人员提供了一系列功能强大并且无侵入的诊断工具,本文主要介绍的是 .NET Core dotnet 诊断全局工具

先决条件

支持.NET Core 3.0 SDK 及更高版本, .NET Core 命令行接口 (CLI) 工具

dotnet-counters

dotnet-counters 是一个性能监视工具,用于临时运行状况监视和初级性能调查, 你可以通过命令查看和存储,当前程序的运行时信息,它可以收集 CPU,内存,GC,线程,异常 等信息

安装 dotnet-counters

dotnet tool install --global dotnet-counters

主要命令
  • dotnet-counters collect
  • dotnet-counters list
  • dotnet-counters monitor
  • dotnet-counters ps
dotnet-counters ps

显示可监视的 dotnet 进程的列表, 我本地显示有两个.Net Core的程序在运行,前面的数字是进程ID

dotnet-counters list

这个命令我们可以看到程序的运行时信息,和Web主机运行信息

  • 运行时:CPU 内存 GC 异常 线程数 异常信息…
  • Web主机: QPS 每秒请求数量, 当前请求数量和失败请求数量
dotnet-counters monitor

这个命令可以实时监控程序的运行信息

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 //以 3 秒的刷新间隔监视 System.Runtime 运行时信息
 dotnet-counters monitor --process-id 19072  --refresh-interval 3 System.Runtime

 //以 3 秒的刷新间隔监视 Web主机 运行信息
 dotnet-counters monitor --process-id 19072  --refresh-interval 3 Microsoft.AspNetCore.Hosting
dotnet-counters collect

定期收集所选计数器的值,并将它们导出为指定的文件格式以进行后续处理。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 以 3 秒的刷新间隔时间收集所有计数器的值,并生成 json 输出文件:
dotnet-counters collect --process-id 19072 --refresh-interval 3 --format json 

dotnet-dump

dotnet-dump是性能收集和分析实用工具,流程是先用 dotnet-dump collect 命令 收集当前程序的运行时信息,然后通过 dotnet-dump analyze 命令启动交互式 shell命令,来分析程序。

安装 dotnet-dump

dotnet tool install -g dotnet-dump

主要命令
  • dotnet-dump collect
  • dotnet-dump analyze
dotnet-dump collect
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 捕获并写入 
dotnet-dump collect --process-id 19072

运行完成后,可以在当前命令行目录中,找到保存的文件,复制文件名,然后使用 dotnet-dump analyze 命令开始分析

dotnet-dump analyze
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 读取文件,并启动交互式shell开始分析 
dotnet-dump analyze dump_20200925_105413.dmp

输入 help 可以查看所有的命令,这里我想获取托管代码的堆栈信息,输入 clrstack

dotnet-trace

dotnet-trace 是一个跨平台的 .NET Core 工具,在不使用本机探查器的情况下启用正在运行的进程的 .NET Core 跟踪集合, 它是围绕 .NET Core 运行时的跨平台 EventPipe 技术而构建的,在 WindowsLinux 或 macOS 上提供相同体验。

安装 dotnet-trace

dotnet tool install --global dotnet-trace

主要命令
  • dotnet-trace collect
  • dotnet-trace convert
  • dotnet-trace ps
  • dotnet-trace list-profiles
dotnet-trace ps

此命令,列出可附加到的 dotnet 进程,我们一般需要拿到进程Id

dotnet-trace collect

dotnet-trace collect --process-id 20196 开始实时获取信息

运行后,数据收集到 trace.nettrace 文件, 按 键停止收集, 可以用 PerfView 打开,我是直接用 VS 打开的,可以看到收集到的数据还是比较全面的。

总结

微软提供了一套强大的诊断工具,熟练的使用这些工具,可以更快更有效的发现程序的运行问题,解决程序的性能问题。

参考文档:https://docs.microsoft.com/zh-cn/dotnet/core/diagnostics/dotnet-counters

dotnet-trace: https://github.com/dotnet/diagnostics.git

打个广告

HttpReports 是针对.Net Core 开发的轻量级APM系统, 基于MIT开源协议,主要支持了统计,分析,告警,链路监控,请求日志等, 文档齐全,前段时间也是很荣幸的加入到了 .NET Core Community 组织,目前在准备V2.0版本的发布计划, 开源不易,还希望感兴趣的同学可以点个 Star 关注下,谢谢

Github地址:https://github.com/dotnetcore/HttpReports

在线文档:https://www.yuque.com/httpreports/docs

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
.NET 中的 EventCounters
EventCounters 是 .NET API,用于轻量级、跨平台、准实时性能指标收集。 EventCounters 作为 Windows 上 .NET 框架的“性能计数器”的跨平台替代项添加。 本文将介绍什么是 EventCounters,如何实现它们,以及如何使用它们。
呆呆
2022/01/07
1.6K0
.NET 7.0/8.0 下 WinForm 的 AOT 尝试与实践
随着 .NET 的不断发展,AOT(Ahead-of-Time)编译逐渐成为提升应用性能和部署灵活性的关键技术。在 .NET 7.0 和 8.0 中,微软进一步优化了 Native AOT 的支持,使其能够应用于更多场景,包括传统的 Windows Forms(WinForm) 桌面应用。本文将探讨如何在 .NET 7.0/8.0 下为 WinForm 应用启用 AOT 编译,并分析其优势、挑战及实际应用案例。
郑子铭
2025/03/20
1.5K0
.NET 7.0/8.0 下 WinForm 的 AOT 尝试与实践
调试 .NET Core 中的内存泄漏
当应用引用不再需要执行所需任务的对象时,可能会发生内存泄漏。 引用上述对象会使垃圾回收器无法回收所使用的内存,这通常会导致性能降低,并可能最终引发 OutOfMemoryException。
呆呆
2022/01/09
2K0
记一次ASP.NET CORE线上内存溢出问题与dotnet-dump的排查方法
项目又都运行在docker容器中,容器为了最小化,采用了极简的系统,几乎任何常见命令都没有.
GuZhenYin
2025/05/17
2510
记一次ASP.NET CORE线上内存溢出问题与dotnet-dump的排查方法
dotnet-trace 性能分析实用工具
若要安装最新版 dotnet-trace NuGet 包,请使用 dotnet tool install 命令:
呆呆
2022/01/09
1.3K0
当 dotnet-monitor 遇上 Prometheus, 是种什么样的体验?
对于开发和运维人员来说, 监控大屏很棒, 让我们来做一个 Dashboard 吧!大家可能听说过一些 CLI 诊断工具, 比如 dotnet-counters,dotnet-dump 和 dotnet-trace, 那 dotnet-monitor 又是什么呢?简单理解就是把上面的几种诊断工具进行了包装, 并且暴露了 对应的 REST API, 让诊断变的更容易, 在去年, dotnet-monitor 还是一个实验性的诊断工具, 当时我也写了一篇文章介绍 dotnet-monitor,使用 dotnet-monitor 分析.NET 应用程序 , 而最近, .NET 团队宣布第一个 release 版本的 dotnet-monitor, 同时它也是 .NET 6 的内容, 也就是 dotnet-monitor 6.0.0 !
全球技术精选
2021/12/07
6550
当 dotnet-monitor 遇上 Prometheus, 是种什么样的体验?
调试 .NET Core 中的高 CPU 使用率
本教程将介绍如何调试 CPU 使用率过高的情况。 使用提供的示例 ASP.NET Core Web 应用 源代码存储库,可以故意造成死锁。 终结点将停止响应并遇到线程累积问题。 你将了解如何使用各种工具,通过几条关键的诊断数据诊断此情况。
呆呆
2022/01/09
1.5K0
教程:使用 .NET Core 中的 EventCounters 衡量性能
本教程将介绍如何使用 EventCounter 衡量高频率事件的性能。 可以使用由各种官方 .NET Core 包或第三方提供者发布的可用的计数器,或创建自己的监视指标。
呆呆
2022/01/07
5690
.NET Core 调试 CPU 爆高问题
在实际开发和生产环境中,.NET Core 应用程序遇到 CPU 使用率飙升的问题并不少见。CPU 高负载会直接影响应用程序的性能,进而影响用户体验。因此,及时识别并解决 CPU 爆高问题是开发者需要掌握的关键技能。
Michel_Rolle
2024/12/24
3.2K0
工良出品,从零设计开发 .NET 开发框架:框架源码和教程电子书
在毕业之后,读者写过了大量的文章和开源项目,正是坚持一边学习一边输出,所以笔者最终从一个生菜鸡进化为一个熟菜鸡。
沙漠尽头的狼
2024/03/21
2080
工良出品,从零设计开发 .NET 开发框架:框架源码和教程电子书
.NET GC 实时监控工具 dotnet gcmon 介绍
今天介绍一个新的诊断工具 dotnet-gcmon, 也是全局 .NET CLI 工具, 它可以监控到 .NET 程序的 GC, 能获取到的信息也很详细, 另外 maoni 大佬也是其中的开发者之一。
全球技术精选
2021/11/30
5100
.NET GC 实时监控工具 dotnet gcmon 介绍
使用 dotnet-monitor 分析.NET 应用程序
dotnet-monitor 是 .NET Core 命令行接口 (CLI) 工具, 可以很方便的在dotnet环境中分析我们的应用程序,需要注意的是,目前它还只是一个实验性的工具
全球技术精选
2021/01/09
6990
使用 dotnet-monitor 分析.NET 应用程序
译 | .NET Core 3.0 对诊断的改进
在 .NET Core 3.0 中,我们将引入一套工具,这些工具利用 .NET 运行时中的新功能,使诊断和解决性能问题变得更加容易。
Edi Wang
2019/07/09
1.8K0
《快来为你的 .NET 应用加个监控吧!》更新版本啦
CZGL.ProcessMetrics 是一个 Metrics 库,能够将程序的 GC、CPU、内存、机器网络、磁盘空间等信息记录下来,使用 Prometheus 采集信息,然后使用 Grafana 显示。
痴者工良
2021/07/20
5580
《快来为你的 .NET 应用加个监控吧!》更新版本啦
收集指标
本文适用范围:✔️ .NET Core 3.1 及更高版本 ✔️ .NET Framework 4.6.1 及更高版本
呆呆
2022/01/07
7040
揭秘.NET Core应用中的十大性能陷阱与优化实战
.NET Core 以高性能、可扩展性和灵活性著称,但即使是最优秀的框架,若忽视了潜藏的“性能杀手”,应用也会陷入低效泥潭。这些“沉默的刺客”会降低执行效率、增加响应时间,甚至导致资源浪费。
郑子铭
2025/04/14
1890
揭秘.NET Core应用中的十大性能陷阱与优化实战
内存管理终极指南!揭秘.NET高并发系统性能飞跃的7大核心策略
作为管理大型.NET应用的开发者,日常工作中最严峻的挑战是如何在极致压榨内存的同时保持性能稳定。面对大数据处理或高吞吐系统,不当的内存使用会导致高延迟、频繁GC暂停甚至应用崩溃。本文将揭示经过生产验证的.NET内存优化秘技。
郑子铭
2025/05/13
1150
内存管理终极指南!揭秘.NET高并发系统性能飞跃的7大核心策略
【翻译】.NET 6 中的 dotnet monitor
我们在 2020 年 6 月首次推出了dotnet monitor 作为实验工具,并在去年(2020年)努力将其转变为生产级工具。今天,我很高兴地的宣布 dotnet monitor 的第一个正式版将和 .NET 6 一起发布,作为 .NET 6 的一部分。
晓晨
2021/12/09
6400
【翻译】.NET 6 中的 dotnet monitor
动手实现一个适用于.NET Core 的诊断工具
大家可能对诊断工具并不陌生,从大名鼎鼎的 dotTrace,到 .NET CLI 推出的一系列的高效诊断组件(dotnet trace,dotnet sos,dotnet dump)等, 这些工具提升了对程序Debug的能力和效率,可以让开发人员从更高层次的维度来发现程序中的问题。
全球技术精选
2021/05/18
6310
动手实现一个适用于.NET Core 的诊断工具
调试 .NET Core 中的死锁
本教程将介绍如何调试死锁情况。 使用提供的示例 ASP.NET Core Web 应用 源代码存储库,可以故意造成死锁。 终结点将停止响应并遇到线程累积问题。 你将了解如何使用各种工具来分析问题,例如核心转储、核心转储分析和进程跟踪。
呆呆
2022/01/09
8590
相关推荐
.NET 中的 EventCounters
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档