do.net-counters 是用于实时监控 .net 应用性能计数器的跨平台命令行工具,需通过 dotnet tool install 安装,支持按 pid 或进程名监控、自定义提供程序采集及导出 nettrace 文件分析。

如果您需要在运行时实时监控 .NET 应用程序的性能计数器(如 CPU 使用率、内存分配、GC 次数、请求吞吐量等),dotnet-counters 是一个轻量级、跨平台的命令行工具,专为此类场景设计。以下是使用该工具的具体方法:
一、安装 dotnet-counters 工具
dotnet-counters 是一个全局 .NET 工具,需通过 dotnet CLI 安装。它依赖于目标应用运行在支持事件计数器的 .NET 运行时(.NET Core 3.0+ 或 .NET 5+)。
1、确保已安装 .NET SDK(版本不低于 3.1)。
2、执行以下命令安装最新稳定版工具:
dotnet tool install –global dotnet-counters
3、若已安装旧版本,可升级:
dotnet tool update –global dotnet-counters
4、验证安装是否成功:
dotnet counters –version
注意:无需重启终端,但若提示“command not found”,请检查 PATH 是否包含 ~/.dotnet/tools(linux/macos)或 %USERPROFILE%.dotnettools(windows)
二、启动目标应用程序并获取进程 ID
dotnet-counters 需要连接到正在运行的 .NET 进程,因此目标应用必须已启动且启用 EventPipe(默认启用)。控制台、Web API、Worker Service 均支持。
1、在终端中启动目标应用(例如启动 ASP.NET Core Web API):
dotnet run –project MyWebApi.csproj
2、另开一个终端,执行以下命令列出所有可监控的 .NET 进程:
dotnet counters list
3、从输出中识别目标进程,记录其 PID(进程 ID) 或 名称(如 MyWebApi);若名称含空格,需用引号包裹。
三、实时监控默认计数器集
dotnet-counters 提供预定义的常用计数器视图(如 System.Runtime),适用于大多数场景,无需额外配置即可快速观察核心指标。
1、执行基础监控命令:
dotnet counters monitor –process-id 12345
2、若已知进程名(如 MyWebApi),可改用:
dotnet counters monitor -n MyWebApi
3、指定特定提供程序(如仅监控运行时):
dotnet counters monitor -p 12345 –counters System.Runtime
默认每秒刷新一次数据;按 Ctrl+C 可中断监控
四、监控自定义计数器提供程序
除内置的 System.Runtime 外,应用可注册自定义 EventCounter 提供程序(如 microsoft.AspNetCore.Hosting、MyApp.Metrics),需显式声明才能被 dotnet-counters 识别和采集。
1、确认应用代码中已注册自定义计数器(例如在 Program.cs 中调用 new DiagnosticListener(“MyApp.Metrics”) 并发布 EventCounter)。
2、启动应用后,执行:
dotnet counters list -p 12345
3、从返回列表中查找自定义提供程序名称(如 MyApp.Metrics)。
4、监控该提供程序:
dotnet counters monitor -p 12345 –counters MyApp.Metrics
多个提供程序可用英文逗号分隔,例如:–counters System.Runtime,MyApp.Metrics
五、导出监控数据到文件进行分析
dotnet-counters 支持将原始计数器流保存为 nettrace 文件,便于离线分析或与 PerfView 等工具联动。
1、执行导出命令(不实时显示界面):
dotnet counters collect -p 12345 –format nettrace –output counters.nettrace
2、设置采集持续时间(例如 30 秒):
dotnet counters collect -p 12345 –duration 00:00:30 –output counters.nettrace
3、采集完成后,该文件可使用 dotnet-trace 分析,或拖入 PerfView 加载 “Events” 视图查看计数器时间序列。
导出模式下不会在控制台打印实时数值;文件默认使用 UTF-8 编码,路径需有写入权限