今天介绍一个新的诊断工具 dotnet-gcmon, 也是全局 .NET CLI 工具, 它可以监控到 .NET 程序的 GC, 能获取到的信息也很详细, 另外 maoni 大佬也是其中的开发者之一。
安装 gcmon
和其他的 dotnet 诊断工具一样, 你可以使用以下命令,进行全局安装
dotnet tool install -g dotnet-gcmon
参数介绍
参数 | 描述 |
n | 进程名, dotnet 应用的进程名 |
p | 进程ID, dotnet 应用的 Process ID |
m | 最小 GC 暂停持续时间(以毫秒为单位),可选 |
c | 指定一个 yaml 配置文件路径, 可选 |
使用
使用非常简单, 我们需要指定被监控的 dotnet 应用的进程名或者是进程ID (PID), 这里也可以使用另外一个诊断工具 dotnet-trace, 安装命令如下
dotnet tool install -g dotnet-trace
然后运行 dotnet trace ps
获取所有的 dotnet 进程
接下来, 运行 dotnet gcmon -p 21904
, 开始监控 dotnet 应用, 诊断工具会输出下面的信息
在诊断工具运行的时候, 按下 s
键, 会输出当前 GC 的整体和每一代的状态
另外还可以使用 yaml 配置文件, 灵活配置诊断工具输出列,具体可以参考 github。
总结
dotnet gcmon 是一个小而实用的诊断工具, 并且还在迭代中, 在对于代码无侵入的情况下, 排查问题还是很方便的, 另外 .NET 现在已经有近十个诊断工具了!
gcmon 的工作原理是什么呢? 其实主要是调用了 CLR 运行时团队提供的一个诊断库, Microsoft.Diagnostics.NETCore.Client
, 这个库功能就非常强大了, 各种运行时信息都可以拿到, 当然你也可以用它实现一个诊断工具, 这个库是基于 EventPipe, IPC 等实现的, 还是很复杂的, 最后希望本文对您有用!
https://github.com/Maoni0/realmon