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
Sourcepub fn new(runtime: &Handle) -> RuntimeMonitor
pub fn new(runtime: &Handle) -> RuntimeMonitor
Creates a new 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 Freeze for RuntimeMonitor
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