4 个版本
0.1.14 | 2024 年 4 月 12 日 |
---|---|
0.1.13 | 2024 年 4 月 10 日 |
0.1.12 | 2024 年 4 月 9 日 |
0.1.11 | 2024 年 4 月 9 日 |
#434 in 调试
每月 23 次下载
345KB
7K SLoC
tokio-console CLI
🎛️ Tokio 控制台:异步 Rust 程序的调试器。
概述
tokio-console
是异步 Rust 应用程序的调试和性能分析工具,它可以收集并显示应用程序中异步任务、资源和操作的大量诊断数据。控制台系统由两个主要组件组成
- 📡️ 仪器,嵌入到应用程序中,收集异步运行时的数据,并通过控制台的线格式暴露
- 🛰️ 消费者,连接到仪器化的应用程序,接收遥测数据,并将其显示给用户
该包是 tokio-console
遥测的主要消费者,是一个提供交互式调试界面的命令行应用程序。
入门
要使用控制台监视和调试程序,它必须被仪器化以发出控制台消耗的数据。然后,可以使用 tokio-console
CLI 应用程序连接到应用程序并监视其操作。
仪器化应用程序
在控制台可以连接到应用程序之前,它必须首先被仪器化以记录 tokio-console
遥测。这样做最简单的方法是使用 console-subscriber
包。
console-subscriber
需要应用程序的异步运行时(或运行时)以控制台可以记录的格式发射 tracing
数据。对于使用 Tokio 运行时的程序,这意味着
- 必须启用 Tokio 的 不稳定特性。有关详细信息,请参阅
console-subscriber
文档。 - 必须使用兼容的 Tokio 版本。要使用控制台,需要 Tokio v1.0 或更高版本,某些功能仅适用于后续版本。有关详细信息,请参阅
console-subscriber
文档。
使用控制台
一旦应用程序被配置,可以使用以下命令安装控制台 CLI:
cargo install --locked tokio-console
运行 tokio-console
不带任何参数将会连接到本机默认端口 6669 监听的应用程序
tokio-console
如果应用程序不在本地运行,或者被配置为监听不同的端口,控制台也会接受一个类似命令的参数作为目标地址
tokio-console http://192.168.0.42:9090
也可以提供 DNS 名称作为目标地址
tokio-console http://my.instrumented.application.local:6669
有关所有命令行参数的完整列表,请参阅 此处
Tokio 控制台有多种不同的视图
任务列表
当控制台 CLI 启动时,它会显示程序中所有 异步任务 的列表
任务以表格的形式显示。
Warn
- 任务中活跃的警告数量。ID
- 任务的 ID。这与不稳定tokio::task::Id
API 返回的值相同(有关详细信息,请参阅文档)。State
- 任务的当前状态。RUNNING
/▶ - 任务目前正在被轮询。IDLE
/⏸ - 任务正在等待某些资源。SCHED
/⏫ - 任务已计划(它已被唤醒但尚未被轮询)。DONE
/⏹ - 任务已完成。
Name
- 任务的名称,可以在使用不稳定tokio::task::Builder::name()
API 创建任务时设置。Total
- 任务的存活时间(忙、计划和空闲时间的总和)。Busy
- 任务积极执行的总时间。Sched
- 任务的计划时间(由运行时轮询的任务的总时间)。Idle
- 任务空闲的总时间(等待被唤醒)。Polls
- 任务被轮询的次数。Target
- 用于记录任务的跨度目标。tokio::task
- 异步任务。tokio::task::blocking
- 阻塞任务(通过 tokio::task::spawn_blocking 创建)。
Location
- 任务被创建的源代码位置。Fields
- 任务跨度上的附加字段。kind
- 可能是task
(对于异步任务)或blocking
(对于阻塞任务)。fn
- 阻塞任务的功能签名。异步任务不记录此字段,因为它在使用async
/await
时通常非常大。
使用 ↑ 和 ↓ 光标键,可以突出显示单个任务。在任务突出显示时按 enter 键将显示该任务的相关详细信息。
任务详情
此视图显示特定任务的相关详细信息
任务详细信息视图包括百分位数和轮询(忙碌)时间和调度时间的可视直方图。
按 escape 键返回任务列表。
资源列表
r 键将从任务列表切换到资源列表,例如同步原语、I/O 资源等。
资源以类似于任务列表的表格形式显示。
ID
- 资源的 ID。这是一个显示 ID,因为没有内部资源 ID 可引用。Parent
- 如果存在,则包含父资源 ID。Kind
- 资源类型,这是资源的高级分组。Sync
- 来自tokio::sync
的同步资源,例如Mutex
。Timer
- 来自tokio::time
的计时器资源,例如Sleep
。
Total
- 此资源存在的时间总和。Target
- 资源类型的模块路径。Type
- 资源的具体类型,可能值取决于在 Tokio 中配置的资源,可能在不同版本之间有所不同。Vis
- 资源的可见性。INT
/🔒 - 内部,此资源仅由其他资源使用。PUB
/✅ - 公共的,在公共 Tokio API 中可用。
Location
- 资源被创建的源代码位置。Attributes
- 附加的资源相关属性,例如类型为Sleep
的资源记录睡眠的duration
。
按 t 键将视图切换回任务列表。
与任务列表视图类似,资源列表视图可以使用 ↑ 和 ↓ 光标键进行导航。在突出显示资源时按 enter 键将显示该资源的相关详细信息。
资源详情
资源详情视图列出了当前等待该资源的任务。这可能是一个任务,例如上面的 tokio::time::Sleep
,或者大量的任务,如这个私有的 tokio::sync::batch_semaphore::Semaphore
资源详情视图包含属于该资源的异步操作表。
ID
- 异步操作的ID。这是一个类似资源记录的显示ID。Parent
- 如果存在,父异步操作的ID。Task
- 执行此异步操作的任务的ID和名称。Source
- 调用异步操作的方法。Total
- 异步操作存在的时间总和(忙状态和空闲状态的累加,因为异步操作没有已计划状态)。Busy
- 异步操作忙碌的总时间(其未来正在积极轮询)。Idle
- 异步操作空闲的总时间(未来存在但未轮询)。Polls
- 异步操作被轮询的次数。Attributes
- 异步操作的额外属性。这些属性将根据异步操作的类型而变化。
与任务详情视图类似,在查看资源详情时按 escape 键将返回到资源列表。
可以使用配置文件(console.toml
)来配置控制台的行为。有关详细信息,请参阅文档。
获取帮助
首先,查看您的答案是否可以在API文档中找到。如果答案不在那里,Tokio Discord服务器中有一个活跃的社区。我们将很乐意尝试回答您的问题。您也可以在讨论页面上提问。
贡献
🎈 感谢您帮助改进项目!我们非常高兴有您!我们有一个贡献指南,帮助您参与Tokio控制台项目。
支持的Rust版本
托科控制台是基于最新的稳定版构建的。最低支持版本是1.64。当前托科控制台版本不保证在低于最低支持版本的Rust版本上构建。
许可证
本项目根据MIT许可证许可。
贡献
除非您明确说明,否则您提交的任何有意包含在托科中的贡献,都应按照MIT许可证许可,不附加任何其他条款或条件。
依赖关系
~25–39MB
~634K SLoC