actorStats (totals/denies) and the anomaly tracker store per-actor state in maps keyed by the free-form actor string, with no eviction. Sending many distinct actor strings grows memory without bound → OOM.
Location: engine/internal/server/risk.go:223 and the anomaly tracker.
Fix: Use bounded state — LRU/TTL caches or external store (Redis) — for per-actor counters.
actorStats(totals/denies) and the anomaly tracker store per-actor state in maps keyed by the free-formactorstring, with no eviction. Sending many distinct actor strings grows memory without bound → OOM.Location:
engine/internal/server/risk.go:223and the anomaly tracker.Fix: Use bounded state — LRU/TTL caches or external store (Redis) — for per-actor counters.