diff --git a/src/config/mod.rs b/src/config/mod.rs
index c842b77068f447256bea61223da8720f1388d9ae..da14c184b4c22dcfbca6adeea67bf61f2d19c6be 100644
--- a/src/config/mod.rs
+++ b/src/config/mod.rs
@@ -178,6 +178,9 @@ pub(crate) struct Config {
 	#[serde(default = "default_tracing_flame_filter")]
 	#[cfg(feature = "perf_measurements")]
 	pub(crate) tracing_flame_filter: String,
+	#[serde(default = "default_tracing_flame_output_path")]
+	#[cfg(feature = "perf_measurements")]
+	pub(crate) tracing_flame_output_path: String,
 	#[serde(default)]
 	pub(crate) proxy: ProxyConfig,
 	pub(crate) jwt_secret: Option<String>,
@@ -940,6 +943,9 @@ fn default_max_fetch_prev_events() -> u16 { 100_u16 }
 #[cfg(feature = "perf_measurements")]
 fn default_tracing_flame_filter() -> String { "trace,h2=off".to_owned() }
 
+#[cfg(feature = "perf_measurements")]
+fn default_tracing_flame_output_path() -> String { "./tracing.folded".to_owned() }
+
 fn default_trusted_servers() -> Vec<OwnedServerName> { vec![OwnedServerName::try_from("matrix.org").unwrap()] }
 
 fn default_log() -> String {
diff --git a/src/main.rs b/src/main.rs
index 128766eaf96f27331085e9dda2aaf1c3ac8a81d2..31f04c10b87d4cace7f4a7ffa8950af61540356c 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -630,7 +630,13 @@ fn init_tracing(config: &Config) -> (LogLevelReloadHandles, TracingFlameGuard) {
 				Err(e) => panic!("tracing_flame_filter config value is invalid: {e}"),
 			};
 
-			let (flame_layer, flame_guard) = tracing_flame::FlameLayer::with_file("./tracing.folded").unwrap();
+			let (flame_layer, flame_guard) =
+				match tracing_flame::FlameLayer::with_file(&config.tracing_flame_output_path) {
+					Ok(ok) => ok,
+					Err(e) => {
+						panic!("failed to initialize tracing-flame: {e}");
+					},
+				};
 			let flame_layer = flame_layer
 				.with_empty_samples(false)
 				.with_filter(flame_filter);