diff --git a/node/overseer/src/lib.rs b/node/overseer/src/lib.rs index 331bf6378dda..961e1e659f42 100644 --- a/node/overseer/src/lib.rs +++ b/node/overseer/src/lib.rs @@ -518,18 +518,36 @@ where } let subsystem_meters = overseer.map_subsystems(ExtractNameAndMeters); - let memory_stats = - MemoryAllocationTracker::new().expect("Jemalloc is the default allocator. qed"); - - let metronome = Metronome::new(std::time::Duration::from_millis(950)).for_each(move |_| { - match memory_stats.snapshot() { - Ok(memory_stats_snapshot) => { - tracing::trace!(target: LOG_TARGET, "memory_stats: {:?}", &memory_stats_snapshot); - metronome_metrics.memory_stats_snapshot(memory_stats_snapshot); + let collect_memory_stats: Box = + match MemoryAllocationTracker::new() { + Ok(memory_stats) => + Box::new(move |metrics: &OverseerMetrics| match memory_stats.snapshot() { + Ok(memory_stats_snapshot) => { + tracing::trace!( + target: LOG_TARGET, + "memory_stats: {:?}", + &memory_stats_snapshot + ); + metrics.memory_stats_snapshot(memory_stats_snapshot); + }, + Err(e) => tracing::debug!( + target: LOG_TARGET, + "Failed to obtain memory stats: {:?}", + e + ), + }), + Err(_) => { + tracing::debug!( + target: LOG_TARGET, + "Memory allocation tracking is not supported by the allocator.", + ); + + Box::new(|_| {}) }, + }; - Err(e) => tracing::debug!(target: LOG_TARGET, "Failed to obtain memory stats: {:?}", e), - } + let metronome = Metronome::new(std::time::Duration::from_millis(950)).for_each(move |_| { + collect_memory_stats(&metronome_metrics); // We combine the amount of messages from subsystems to the overseer // as well as the amount of messages from external sources to the overseer