dotnet-monitor 是 .NET Core 命令行接口 (CLI) 工具, 可以很方便的在dotnet环境中分析我们的应用程序,需要注意的是,目前它还只是一个实验性的工具

在这之前,我们使用的有 dotnet-counters,dotnet-dump 和 dotnet-trace,那 dotnet-monitor 有什么意义呢?在运行dotnet应用程序时,不同的本地环境和生产环境中的差异可能使收集诊断工件(例如日志,跟踪,过程转储)变得困难, 所以需要通过公开一致的REST API来简化诊断的流程,而不受程序环境的影响,可以更方便的分析程序的问题。

安装 dotnet-monitor

本地使用

你可以使用以下命令,进行全局安装,因为本身是一个实验性的工具,所以需要在后面加上 --add-source

dotnet tool install -g dotnet-monitor --add-source https://dnceng.pkgs.visualstudio.com/public/_packaging/dotnet5-transport/nuget/v3/index.json --version 5.0.0-preview.*

安装完成成,执行以下命令,启动成功后,会开放 http://localhost:52323http://localhost:52325 两个端口,我们这里只使用 52323

dotnet monitor collect

Dokcer 环境

docker pull mcr.microsoft.com/dotnet/nightly/monitor:5.0.0-preview.1

拉取完成后, 执行

docker volume create diagnosticserver
docker run -d --rm -p 8000:80 -v diagnosticsserver:/tmp mcr.microsoft.com/dotnet/core/samples:aspnetapp
docker run -it --rm -p 52323:52323 -v diagnosticsserver:/tmp mcr.microsoft.com/dotnet/nightly/monitor:5.0.0-preview.1 --urls http://*:52323

端点列表

你可以访问 http://localhost:52323, 这个 REST API 开放了以下端点,pid 是 processId 进程Id,我们需要找到需要监控的程序的进程id,这里我本地的进程id是21856

  • /processes
  • /dump/{pid?}
  • /gcdump/{pid?}
  • /trace/{pid?}
  • /logs/{pid?}
  • /metrics

Processes

进程信息,访问 http://localhost:52323/processes,会显示所有的dotnet 程序的进程id的列表,不给过这个命令属实有点鸡肋,因为我并不能知道哪个是我需要的 pid,它们都一样

[{
"pid": 36540,
"uid": "b65c518b-0ad3-4ebf-af85-dfb3c862d1a7"
}, {
"pid": 11088,
"uid": "00000000-0000-0000-0000-000000000000"
}, {
"pid": 21856,
"uid": "00000000-0000-0000-0000-000000000000"
}, {
"pid": 39008,
"uid": "00000000-0000-0000-0000-000000000000"
}]

Dump

转储文件,访问 http://localhost:52323/dump/pid 来下载文件

GCDump

收集 GCDump,可以访问 http://localhost:52323/gcdump/pid, 跟 Dump 文件不同的是,GCDump 文件是一种轻便的格式,你可以使用 VS 或者 perfview 打开并分析

Trace

跟踪数据,http://localhost:52323/trace/pid ,trace 可以获取到 CPU Stack(栈), Http 请求的开始和结束事件,来自 EventSourceLogger 和 Microsoft.Extensions.Logging 的日志,Runtime 运行时和 ASP.NET Core EventCounters 的指标数据, 下载生成的 .nettrace 文件,你同样可以使用 VS 或者 PerfView 打开

总结

https://github.com/dotnet/diagnostics

dotnet-monitor 诊断工具,提供了一套 REST API 来访问诊断数据,目前还只推出了预览版,大家可以在 github上 反馈和关注项目的进度

扩展项目

dotnet-monitor-ui 是一个针对与 dotnet-monitor的ui项目,这得益于 dotnet-monitor 提供了一套便捷的 REST API, 你可以在 github 关注这个项目,了解它后台是如何工作的

最后

欢迎关注我们的公众号,专注国外优秀博客的翻译和开源项目分享,也可以添加QQ群 897216102

使用 dotnet-monitor 分析.NET 应用程序的更多相关文章

  1. 在 NetBeans IDE 6.0 中分析 Java 应用程序性能

    NetBeans IDE 6.0 包含一个强大的性能分析工具,可提供与应用程序运行时行为有关的重要信息.通过 NetBeans 性能分析工具,我们可以方便地在 IDE 中监控应用程序的线程状态.CPU ...

  2. 【翻译】.NET 6 中的 dotnet monitor

    原文:Announcing dotnet monitor in .NET 6 我们在 2020 年 6 月首次推出了dotnet monitor 作为实验工具,并在去年(2020年)努力将其转变为生产 ...

  3. 使用Monitor调试Unity3D Android程序日志输出(非DDMS和ADB)

    使用Monitor调试Unity3D Android程序日志输出(非DDMS和ADB) http://www.cnblogs.com/mrkelly/p/4015245.html 以往调试Androi ...

  4. 教你50招提升ASP.NET性能(三):使用Microsoft的PDBs调试和分析外部的程序集和库

    (3)Use Microsoft’s PDBs to debug or profile external assemblies or libraries 招数3: 使用Microsoft的PDBs调试 ...

  5. Process Monitor分析某个应用行为

    1.打开Process Mointor 2.点击filter-->filter   在弹出的对话框中Architecture 下拉框,选择Process Name 填写要分析的应用程序名字. 点 ...

  6. Envoy 源码分析--程序启动过程

    目录 Envoy 源码分析--程序启动过程 初始化 main 入口 MainCommon 初始化 服务 InstanceImpl 初始化 启动 main 启动入口 服务启动流程 LDS 服务启动流程 ...

  7. 从程序员的角度分析微信小程序(编程语言:用到什么学什么)

    从程序员的角度分析微信小程序(编程语言:用到什么学什么) 一.总结 一句话总结:微信小程序原理就是用JS调用底层native组件,和React Native非常类似.(需要时,用到时再学) 1.选择语 ...

  8. 分析一个delphi程序

    系统 : Windows xp 程序 : k4n6 程序下载地址 :https://pan.baidu.com/s/1pLANxyj 要求 : 注册机编写 使用工具 : OD & DeDe 可 ...

  9. 分析windows .net程序dump文件的两种方式

    1.WinDbg 按照自己系统版本下载对应windbg(https://debugging.wellisolutions.de/windbg-versions/),win10版本自动下载文件符号,体验 ...

随机推荐

  1. 从内存泄露、内存溢出和堆外内存,JVM优化参数配置参数

    内存泄漏 内存泄漏是指程序在申请内存后,无法释放已申请的内存空间,无用对象(不再使用的对象)持续占有内存或无用对象的内存得不到及时释放,从而造成内存空间的浪费.内存泄漏最终会导致OOM. 造成内存泄漏 ...

  2. 第7.19节 Python中的抽象类详解:abstractmethod、abc与真实子类

    第7.19节 Python中的抽象类详解:abstractmethod.abc与真实子类 一.    引言 前面相关的章节已经介绍过,Python中定义某种类型是以实现了该类型对应的协议为标准的,而不 ...

  3. 第8.18节 Python类中内置析构方法__del__

    一. 引言 基本上所有支持OOP设计的语言都支持析构方法(也称析构函数),析构方法都是在对象生命周期结束时调用,一般用来实施实例相关生命周期内访问数据的扫尾工作,包括关闭文件.释放内存.输出日志.清理 ...

  4. 第15.12节PyQt(Python+Qt)入门学习:可视化设计界面组件布局详解

    一.引言 在Qt Designer中,在左边部件栏的提供了界面布局相关部件,如图: 可以看到共包含有四种布局部件,分别是垂直布局(Vertical Layout).水平布局(Horizontal La ...

  5. webpack项目如何正确打包引入的自定义字体?

    一. 如何在Vue或React项目中使用自定义字体 在开发前端项目时,经常会遇到UI同事希望在项目中使用一个炫酷字体的需求.那么怎么在项目中使用自定义字体呢? 其实实现起来并不复杂,可以借用CSS3 ...

  6. PHash从0到1

    背景 在重复图识别领域,对于识别肉眼相同图片,PHash是很有用的,而且算法复杂度很低.它抓住了 " 人眼对于细节信息不是很敏感 " 的特性,利用DCT变换把高频信息去掉,再加上合 ...

  7. Outlook会议中人员窗格消失了

    Outlook会议中人员窗格消失了,如何恢复: 在[文件]-[信息]-[管理COM加载项] 启用Outlook social conector, 对启用,一直启用,再重启OUTLOOK即可.

  8. Python 中的哈希表

    Python 中的哈希表:对字典的理解   有没有想过,Python中的字典为什么这么高效稳定.原因是他是建立在hash表上.了解Python中的hash表有助于更好的理解Python,因为Pytho ...

  9. Java-静态关键字Static&静态代码块

    静态成员变量:(static修饰变量) 如果一个成员变量使用了static关键字,那么这个变量不再属于对象自己,而是属于所在的类.多个对象共享同一份数据. 静态方法:(static修饰方法) 一旦使用 ...

  10. github拉去代码慢的处理方式(最简单)

    https://github.com/xxx/xxxx 替换成 https://github.com.cnpmjs.org/xxx/xxxx 再去拉取,速度快很多,亲测可用