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::IdAPI 返回的值相同(有关详细信息,请参阅文档)。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