前言

开发人员的.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

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

 //以 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

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

// 以 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

// 捕获并写入
dotnet-dump collect --process-id 19072

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

dotnet-dump analyze

// 读取文件,并启动交互式shell开始分析
dotnet-dump collect --process-id 19072

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

dotnet-trace

dotnet-trace 是一个跨平台的 .NET Core 工具,在不使用本机探查器的情况下启用正在运行的进程的 .NET Core 跟踪集合,
它是围绕 .NET Core 运行时的跨平台 EventPipe 技术而构建的,在 Windows、Linux 或 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://moa.hengyinfs.com

账号: admin 密码 123456

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

.NET Core CLI 的性能诊断工具介绍相关推荐

  1. 使用vs自带的性能诊断工具

    visual studio是个强大的集成开发环境,内置了程序性能诊断工具.下面通过两段代码进行介绍. static void Main( string[] args){Test1();Test2(); ...

  2. hanganalyz 性能诊断工具

    hanganalyze是ORACLE的一款性能诊断工具,这个款工具是从oracle 8.0.6开始可用,在oracle数据库出现严重的性能问题的时候它可以帮助你定位问题所在. 1.首先说说hangan ...

  3. 今晚直播丨用高效的Oracle性能诊断工具,让运维工作轻松起来!

    Oracle诊断性能问题时常用脚本工具 - 4月15日20:00 "工欲善其事,必先利其器",对于 Oracle 数据库性能诊断工作同样如此:在积累了一定数据库性能诊断经验的基础上 ...

  4. Android Studio CPU profiler性能分析工具介绍和使用详解

    Android Studio CPU profiler性能分析工具介绍和使用详解 CPU profiler介绍 Android Studio CPU 性能剖析器可实时检查应用的 CPU 使用率和线程活 ...

  5. oracle 性能诊断工具,oracle性能诊断工具

    oracle提供的性能诊断的工具:autotrace.sql_trace.10046事件. 简要记录一下这些工具的使用方法: autotrace用于跟踪sql的执行计划,收集统计信息. 默认此功能是关 ...

  6. C# 性能诊断工具 dotnet-counters 的使用

    官网地址(以此为准):dotnet-counters 诊断工具 - .NET CLI | Microsoft Docs 该工具主要用于监控当前项目的总体状态计数,如系统运行时.web站点请求状况等. ...

  7. 【Netdata】性能监测工具介绍、安装、使用

    一.工具介绍 Netdata是一款Linux系统实时性能监测工具,以web的可视化方式展示系统及应用程序的实时运行状态.前端响应快,UI很整洁,操作方面,支持图表重置,缩放.具体优点如下:界面酷炫:i ...

  8. 运维工作常用的性能分析工具介绍

    在运维工作中常用到的性能分析工具包括:vmstat.sar.iostat.netstat.free.ps.top.mpstat以及第三方开发工具,如:dstat.collectl及淘宝的开源监控项目t ...

  9. gbd 分析core文件_Go 性能分析工具 pprof 入门

    (给Go开发大全加星标) 来源:wudaijun https://wudaijun.com/2018/04/go-pprof/ [导读]pprof是golang用于性能分析的工具.可以生成图形和文本报 ...

最新文章

  1. 【Python-ML】非线性映射降维-KPCA方法-新样本映射
  2. MySQL DTAETIME、TIMESTAMP、DATE、TIME、YEAR(日期和时间类型)
  3. mapreduce 文件可以切分吗_MapReduce的任务流程
  4. Android自动化测试Uiautomator--UiSelector接口简介
  5. 日志模块logging用法
  6. IIR数字滤波器的设计及应用——MATLAB
  7. .net api reference中文_在macOS上使用.NET SDK编译 .NET 通用中间语言
  8. php嘲讽,PHP为何能够受到大家追捧,又为什么饱受嘲讽?
  9. CVTE 2017 秋季校招一面(C++ 后台)
  10. Log4Net 之走进Log4Net (四)
  11. php做APP接口开发,接口的安全性
  12. SSh三大框架工作原理介绍
  13. 在命令行中创建Django项目
  14. 【电商】电商后台设计—订单中心
  15. Torus:为Kubernetes量身打造的分布式存储方案
  16. 关于强化神兽(圣兽)DBC参数详解
  17. 1042 Shuffling Machine (20 point(s)) - C语言 PAT 甲级
  18. Linux中查看jdk版本
  19. JAVA- IDEA debug 常用快捷键
  20. 已知两点求直线一般方程、点到直线距离、点是否在线上方/下方

热门文章

  1. 【转】基于 Android NDK 的学习之旅-----数据传输(引用数据类型)
  2. 三种查看SqlServer中数据物理pge页的方法
  3. file协议 控制面板_如何在Windows File Explorer导航窗格中显示控制面板和回收站
  4. Object defineProperty
  5. jQuery 对HTML的操作(二)
  6. 系统学习redis之二——redis集群搭建
  7. 【初探移动前端开发03】jQuery Mobile(上)
  8. 避免活跃性危险(第十章)
  9. Android插件基础之类加载器学习
  10. Java基础- super 和 this 解析