docs: file #193 — client OOMs after ~50 min of play (two crashes 2026-07-10)

Two reproducible Out-of-memory crashes in one evening (Release build): one after
an extended dev-UI session, one after ~50 min of retail-UI play. Cause
uncharacterized. Filed post-M2 (stability, not M2 critical path).

Explicitly warns against the retracted "entity leak" reading: the smoke plugin's
"saw N entities total" is a cumulative spawn-EVENT counter, not residency.
Investigation must measure actual managed + unmanaged/GPU memory growth over
time, capture-first. May have contributed to tonight's phantom door-regression
(memory pressure -> GC thrash -> dropped inbound motion).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-07-10 10:03:08 +02:00
parent 9a772d2b2a
commit 02487da0ce

View file

@ -48,6 +48,20 @@ Copy this block when adding a new issue:
## #166 — Port the portal String-table lookup for WeenieError / UseDone text
## #191 — Tapping W (brief forward press) glides forward without playing the step animation
## #193 — Client OOMs after extended play (~50 min); cause uncharacterized
**Status:** OPEN — filed 2026-07-10. `post-M2` (stability, not on the M2 critical path; do not chase mid-M2).
**Severity:** MEDIUM→HIGH (crashes the client after extended sessions; eventual ship blocker, tolerable for short dev-iteration loops today).
**Component:** unknown — memory growth somewhere in the render/streaming/entity path during continuous play.
**Observed 2026-07-10 (two crashes in one evening, both Release build):**
- Crash 1: `dotnet : Out of memory.` after an extended dev-UI session; smoke plugin `saw 37085 entities total` at teardown.
- Crash 2: `Out of memory.` after ~50 min of retail-UI play (started 09:12:07, crashed 10:01:49); `saw 58051 entities total`.
**IMPORTANT — do NOT mis-read the entity number as the cause.** `SmokePlugin.OnEntitySpawned => _entitiesSeen++` is a MONOTONIC cumulative count of every spawn EVENT over the session (never decremented on despawn). 37K/58K over a long roam is normal streaming churn (landblocks re-spawn their entities on every revisit), NOT a resident count and NOT proof of an entity leak. An earlier "entity leak" framing this session was retracted for exactly this reason (see `claude-memory/feedback_phantom_regression_runtime_state.md`).
**How to investigate (capture-first, do NOT guess):** measure ACTUAL memory growth over time — managed heap (`GC.GetTotalMemory` / dotnet-counters) AND unmanaged/GPU (native heap, GL texture/buffer/mesh allocations, the WB mesh caches, `TextureCache`, `GlobalMeshBuffer`). Prime suspects to rule in/out with real measurements: GPU resource accumulation at the High preset (aniso16x/MSAA4x/25×25 far window), per-revisit landblock/mesh/texture cache growth, or a genuine managed leak in the entity/streaming path. Snapshot the working set every N minutes of a roam and diff. Possible contributor to tonight's phantom-door-regression episode (memory pressure → GC thrash → dropped inbound motion packets) — see `feedback_phantom_regression_runtime_state.md`.
**Status:** OPEN
**Severity:** MEDIUM (visible every time a player taps instead of holds a movement