7个不稳定版本 (3个破坏性版本)
0.3.1 | 2023年10月12日 |
---|---|
0.3.0 | 2023年8月14日 |
0.2.2 | 2023年4月13日 |
0.2.0 | 2023年3月6日 |
0.0.0 | 2022年2月17日 |
#1732 在 异步
290,581 每月下载量
用于 26 个软件包 (10 直接)
195KB
797 代码行
Tokio Metrics
提供从Tokio应用程序收集指标的实用程序,包括运行时和每个任务的指标。
[dependencies]
tokio-metrics = { version = "0.3.1", default-features = false }
任务指标入门
使用TaskMonitor
在启动任务之前对其进行测量,并观察这些任务的指标。所有使用给定TaskMonitor
测量的任务将汇总其指标。要分离不同任务的指标,请使用单独的TaskMetrics
实例。
// construct a TaskMonitor
let monitor = tokio_metrics::TaskMonitor::new();
// print task metrics every 500ms
{
let frequency = std::time::Duration::from_millis(500);
let monitor = monitor.clone();
tokio::spawn(async move {
for metrics in monitor.intervals() {
println!("{:?}", metrics);
tokio::time::sleep(frequency).await;
}
});
}
// instrument some tasks and spawn them
loop {
tokio::spawn(monitor.instrument(do_work()));
}
任务指标
基本指标
instrumented_count
测量的任务数量。dropped_count
丢弃的任务数量。first_poll_count
首次被轮询的任务数量。total_first_poll_delay
任务被测量和首次被轮询之间的总持续时间。total_idled_count
任务闲置的总次数,等待被唤醒。total_idle_duration
任务闲置的总持续时间。total_scheduled_count
唤醒(并且,据推测,安排执行)的任务的总次数。total_scheduled_duration
任务在唤醒后等待被轮询的总持续时间。total_poll_count
被轮询的总次数。total_poll_duration
轮询期间的总持续时间。total_fast_poll_count
快速轮询完成的次数。total_fast_poll_duration
快速轮询的总持续时间。total_slow_poll_count
缓慢轮询完成的次数。total_slow_poll_duration
慢速轮询的总持续时间。total_short_delay_count
短调度延迟的总计数。total_short_delay_duration
短调度延迟的总持续时间。total_long_delay_count
长调度延迟的总计数。total_long_delay_duration
长调度延迟的总持续时间。
派生指标
mean_first_poll_delay
任务被工具化后的瞬间与首次被轮询之间的平均持续时间。mean_idle_duration
空闲的平均持续时间。mean_scheduled_duration
任务在唤醒后等待执行的平均持续时间。mean_poll_duration
轮询的平均持续时间。slow_poll_ratio
被分类为慢速和快速轮询的数量比。mean_fast_poll_duration
快速轮询的平均持续时间。mean_slow_poll_duration
慢速轮询的平均持续时间。long_delay_ratio
- 长调度延迟与总调度数量的比。
mean_short_delay_duration
短调度的平均持续时间。mean_long_delay_duration
长调度的平均持续时间。
开始使用运行时指标
此不稳定功能需要 tokio_unstable
和 rt
包功能。要启用 tokio_unstable
,必须在编译时将 --cfg
tokio_unstable
传递给 rustc
。您可以在编译应用程序之前设置 RUSTFLAGS
环境变量来这样做;例如。
RUSTFLAGS="--cfg tokio_unstable" cargo build
或者,在您的包根目录中创建文件 .cargo/config.toml
。如果您使用的是工作区,请将此文件放在工作区根目录中。
[build]
rustflags = ["--cfg", "tokio_unstable"]
rustdocflags = ["--cfg", "tokio_unstable"]
将 .cargo/config.toml
文件放在工作区或包根目录下可能会导致像 Rust-Analyzer 或 VSCode 这样的工具不使用您的 .cargo/config.toml
,因为它们从工作区或包根目录调用 cargo,而 cargo 只在当前和父目录中查找 .cargo
目录。Cargo 忽略子目录中的配置。有关 cargo 寻找配置文件的更多信息,请参阅此处。
在编译期间缺少此配置文件将导致 tokio-metrics 无法工作,并且在包含和不包含此配置文件之间交替构建将导致您的项目进行全面重建。
tokio-metrics
的 rt
功能默认启用;只需确保在将其作为依赖项声明时不要设置 default-features = false
即可;例如。
[dependencies]
tokio-metrics = "0.3.1"
在 Tokio 运行时内部,使用 RuntimeMonitor
来监控该运行时的关键指标。
let handle = tokio::runtime::Handle::current();
let runtime_monitor = tokio_metrics::RuntimeMonitor::new(&handle);
// print runtime metrics every 500ms
let frequency = std::time::Duration::from_millis(500);
tokio::spawn(async move {
for metrics in runtime_monitor.intervals() {
println!("Metrics = {:?}", metrics);
tokio::time::sleep(frequency).await;
}
});
// run some tasks
tokio::spawn(do_work());
tokio::spawn(do_work());
tokio::spawn(do_work());
运行时指标
基本指标
workers_count
运行时使用的Worker线程数。total_park_count
Worker线程停车的次数。max_park_count
任何Worker线程停车的最大次数。min_park_count
任何工作线程挂起的最小次数。total_noop_count
工作线程挂起前未执行任何工作而再次挂起的次数。max_noop_count
任何工作线程挂起前未执行任何工作而再次挂起的最多次数。min_noop_count
任何工作线程挂起前未执行任何工作而再次挂起的最小次数。total_steal_count
工作线程从其他工作线程窃取的任务数。max_steal_count
任何工作线程从其他工作线程窃取任务的最大次数。min_steal_count
任何工作线程从其他工作线程窃取任务的最小次数。total_steal_operations
工作线程从其他工作线程窃取任务的次数。max_steal_operations
任何工作线程从其他工作线程窃取任务的最多次数。min_steal_operations
任何工作线程从其他工作线程窃取任务的最小次数。num_remote_schedules
从运行时外部调度的任务数。total_local_schedule_count
由工作线程调度的任务数。max_local_schedule_count
任何单个工作线程调度的任务的最大次数。min_local_schedule_count
任何单个工作线程调度的任务的最小次数。total_overflow_count
工作线程饱和其本地队列的次数。max_overflow_count
任何单个工作线程饱和其本地队列的最多次数。min_overflow_count
任何单个工作线程饱和其本地队列的最小次数。total_polls_count
所有工作线程中已轮询的任务数。max_polls_count
任何工作线程中已轮询任务的最大次数。min_polls_count
任何工作线程中已轮询任务的最小次数。total_busy_duration
工作线程忙碌的时间。max_busy_duration
工作线程忙碌的最长时间。min_busy_duration
工作线程忙碌的最短时间。injection_queue_depth
当前在运行时注入队列中调度的任务数。total_local_queue_depth
当前在工作者本地队列中调度的总任务数。max_local_queue_depth
任何工作者的本地队列中当前调度的任务的最大次数。min_local_queue_depth
任何工作者的本地队列中当前调度的任务的最小次数。elapsed
从观察运行时指标以来经过的总时间。budget_forced_yield_count
任务因预算耗尽而被强制退出的次数。io_driver_ready_count
从 I/O 驱动程序接收到的就绪事件数。
派生指标
与 Tokio 控制台的关系
目前,Tokio 控制台主要针对 本地 调试。Tokio 指标旨在使您能够将指标报告到您首选的工具。从长远来看,预计 tokio-metrics
将与 Tokio 控制台合并。
许可协议
本项目采用 MIT 许可协议。
贡献
除非您明确声明,否则您提交的任何有意包含在 tokio-metrics 中的贡献,均应按 MIT 许可,不附加任何额外条款或条件。
依赖关系
~3–14MB
~115K SLoC