From 24dc3133ec401902a2ffc019f497707ea289a9b6 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 4 Jul 2026 18:51:21 +0000 Subject: [PATCH] fix(relayBench): raise harness heap to 8g so the 1M sync phase doesn't OOM `SyncBenchmark.effectiveEvents` materializes the whole corpus as Event objects plus a dedup LinkedHashMap to derive the 80% slices, so a million-event run blew past the 2g default with an OutOfMemoryError before the negentropy sync could start. -Xmx is a ceiling, not a reservation, so smaller runs don't pay for the higher limit; JAVA_OPTS still overrides it. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_012EZeWww5TJnzBZKPoc6mvU --- relayBench/build.gradle.kts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/relayBench/build.gradle.kts b/relayBench/build.gradle.kts index 1dccf54b54..8a02cc1e96 100644 --- a/relayBench/build.gradle.kts +++ b/relayBench/build.gradle.kts @@ -10,7 +10,11 @@ application { applicationName = "relaybench" // Percentile latencies get skewed by GC pauses in the *client* — give the // harness enough heap that it never becomes the bottleneck being measured. - applicationDefaultJvmArgs = listOf("-Xmx2g") + // The sync phase also materializes the whole corpus as Event objects (plus + // a dedup map) to derive the 80% slices, so a million-event run needs more + // than 2g or `SyncBenchmark.effectiveEvents` OOMs. -Xmx is a ceiling, not a + // reservation, so small runs don't pay for it. Override with JAVA_OPTS. + applicationDefaultJvmArgs = listOf("-Xmx8g") } kotlin {