Struct tokio_metrics::RuntimeMonitor
source · pub struct RuntimeMonitor { /* private fields */ }
Available on
tokio_unstable
and crate feature rt
only.Expand description
Monitors key metrics of the tokio runtime.
Usage
use std::time::Duration;
use tokio_metrics::RuntimeMonitor;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
let handle = tokio::runtime::Handle::current();
// print runtime metrics every 500ms
{
let runtime_monitor = RuntimeMonitor::new(&handle);
tokio::spawn(async move {
for interval in runtime_monitor.intervals() {
// pretty-print the metric interval
println!("{:?}", interval);
// wait 500ms
tokio::time::sleep(Duration::from_millis(500)).await;
}
});
}
// await some tasks
tokio::join![
do_work(),
do_work(),
do_work(),
];
Ok(())
}
async fn do_work() {
for _ in 0..25 {
tokio::task::yield_now().await;
tokio::time::sleep(Duration::from_millis(100)).await;
}
}
Implementations§
source§impl RuntimeMonitor
impl RuntimeMonitor
pub fn new(runtime: &Handle) -> RuntimeMonitor
sourcepub fn intervals(&self) -> RuntimeIntervals ⓘ
pub fn intervals(&self) -> RuntimeIntervals ⓘ
Produces an unending iterator of RuntimeMetrics
.
Each sampling interval is defined by the time elapsed between advancements of the iterator
produced by RuntimeMonitor::intervals
. The item type of this iterator is RuntimeMetrics
,
which is a bundle of runtime metrics that describe only changes occurring within that sampling
interval.
Example
use std::time::Duration;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
let handle = tokio::runtime::Handle::current();
// construct the runtime metrics monitor
let runtime_monitor = tokio_metrics::RuntimeMonitor::new(&handle);
// print runtime metrics every 500ms
{
tokio::spawn(async move {
for interval in runtime_monitor.intervals() {
// pretty-print the metric interval
println!("{:?}", interval);
// wait 500ms
tokio::time::sleep(Duration::from_millis(500)).await;
}
});
}
// await some tasks
tokio::join![
do_work(),
do_work(),
do_work(),
];
Ok(())
}
async fn do_work() {
for _ in 0..25 {
tokio::task::yield_now().await;
tokio::time::sleep(Duration::from_millis(100)).await;
}
}
Trait Implementations§
Auto Trait Implementations§
impl !RefUnwindSafe for RuntimeMonitor
impl Send for RuntimeMonitor
impl Sync for RuntimeMonitor
impl Unpin for RuntimeMonitor
impl !UnwindSafe for RuntimeMonitor
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more