FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

Memory stays unbounded: ACP session map + compacted tool outputs · Issue #4315 · anomalyco/opencode · GitHub

Memory stays unbounded: ACP session map + compacted tool outputs #4315

Description

Description

Two separate memory leaks keep OpenCode RSS growing without bound:

  1. ACP session manager never frees entries. ACPSessionManager (packages/opencode/src/acp/session.ts:9-72) pushes every new ACP session into a private Map and there is no delete or lifecycle hook tied to cancel. Each ACP IDE reconnect adds another entry plus async subscriptions from setupEventSubscriptions (acp/agent.ts:62-335). The repro script packages/opencode/script/memory/acp-session-leak.ts shows RSS climbing from ~80 MB to ~96 MB after 20k synthetic sessions even with forced GC; heap snapshots (logs/acp-session-leak-*.heapsnapshot) retain all session objects.

  2. Tool compaction does not clear payloads. SessionCompaction.prune only stamps part.state.time.compacted, but the underlying state.output / attachments stay in storage. Every SessionPrompt.prompt reloads the full tool history via MessageV2.stream()/toModelMessage, so sessions with thousands of big tool outputs are re-materialized on every turn. Users report >10 GB RSS after a day because "cleared" tool results are still parsed into JS objects.

Both leaks are captured in spec/memory-leaks.md (benchmark table + repro steps). We need lifecycle cleanup for ACP sessions/subscriptions and real data eviction when compaction marks tool outputs as old.

OpenCode version

v1.0.65

Steps to reproduce

  1. ACP leak: NODE_OPTIONS=--expose-gc npx tsx packages/opencode/script/memory/acp-session-leak.ts → observe RSS + session map size continuing to grow; inspect logs/acp-session-leak-*.heapsnapshot in Chrome DevTools.
  2. Tool-output leak: run a long chat session that repeatedly invokes read/edit/bash on large files (or script fake tool parts) and watch process.memoryUsage() / heap snapshots. Even after compaction UI shows "Old tool result content cleared", the backing JSON still contains every output string which gets reloaded on each prompt.

Screenshot and/or share link

N/A

Operating System

Linux (container)

Terminal

tmux + bash inside Codex CLI

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions


    Back | FazBrowse Home | New Git URL