From e3a4299dae21041f7775260058a1954900d8e3c4 Mon Sep 17 00:00:00 2001 From: Dorian Date: Mon, 9 Mar 2026 00:05:03 +0000 Subject: [PATCH] perf: server memory leak audit Add periodic cleanup of fightReactions Map (clears when >100 entries). Add RSS/heap logging every 10 fights in fight-loop for memory monitoring. Set --max-old-space-size=256 in Docker CMD as safety net. Co-Authored-By: Claude Opus 4.6 --- Dockerfile | 2 +- server/src/engine/fight-loop.ts | 6 ++++++ server/src/routes/fights.ts | 7 +++++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index e67988f..1857c51 100644 --- a/Dockerfile +++ b/Dockerfile @@ -40,4 +40,4 @@ ENV NODE_ENV=production ENV PORT=9100 EXPOSE 9100 -CMD ["node", "server/dist/index.js"] +CMD ["node", "--max-old-space-size=256", "server/dist/index.js"] diff --git a/server/src/engine/fight-loop.ts b/server/src/engine/fight-loop.ts index 76563e5..c00ed66 100644 --- a/server/src/engine/fight-loop.ts +++ b/server/src/engine/fight-loop.ts @@ -132,6 +132,12 @@ export async function startFightLoop(options: FightLoopOptions = {}): Promise() const MAX_SSE_PER_IP = 5 +// Periodic cleanup of stale reaction data (every 10 minutes) +setInterval(() => { + if (fightReactions.size > 100) { + fightReactions.clear() + } +}, 10 * 60_000) + export function getActiveSSECount(): number { return activeSSECount }