
Memory Leak Debug
Diagnose memory leaks in the Qwen Code CLI using heap snapshots and the chrome-devtools...
Install
npx skills add QwenLM/qwen-code --skill memory-leak-debug -g -a claude-code -y- Repository
- QwenLM/qwen-code28.9k
- Category
- Marketing
- Updated
- 3d ago
- License
- Apache-2.0
- Context cost
- Lightabout 1,258 tokens
- Runs scripts
- Yes, review before use
What it does
Diagnose memory leaks in the Qwen Code CLI using heap snapshots and the chrome-devtools CLI. Use when investigating high memory usage, unbounded growth, or suspected object retention issues.
Memory Leak Debugging
Diagnose memory leaks in the Qwen Code Node.js CLI by capturing heap snapshots
and analyzing retained object sizes via chrome-devtools CLI tooling.
Prerequisites
chrome-devtoolsCLI (fromchrome-devtools-mcppackage). If not found, install with:npm i chrome-devtools-mcp@latest -gafter user confirmation. See https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/main/docs/cli.md- Node.js 22+ (for
--heapsnapshot-signalsupport)
Step 1: Start the CLI with Snapshot Signal
Use tmux so you can interact with the TUI and trigger snapshots from another pane. Use the tmux-real-user-testing helper script:
HELPER=.qwen/skills/tmux-real-user-testing/scripts/tmux-real-user-log.sh
eval "$(bash "$HELPER" start memleak . \
env QWEN_CODE_NO_RELAUNCH=true NODE_OPTIONS=--heapsnapshot-signal=SIGUSR2 \
npm run dev)"
echo "SESSION=$SESSION OUTDIR=$OUTDIR"
The eval exports SESSION and OUTDIR. Note: shell environment does not
persist across separate tool calls, save the session name from the output and
use it explicitly in subsequent commands.
Notes:
npm run devruns from TypeScript source via tsx, no build step needed and changes to core/cli are reflected immediately.QWEN_CODE_NO_RELAUNCH=trueprevents the CLI from spawning a child process, so PID management is simpler.NODE_OPTIONSpropagates the flag through npm → tsx → node.
Get the PID of the actual node process. With npm run dev, there's a process
chain (npm → node scripts/dev.js → tsx → node CLI), so walk the tree to the
innermost node child:
NODE_PID=$(bash .qwen/skills/memory-leak-debug/scripts/find-leaf-node.sh "<session-name>")
To profile the production bundle instead (e.g., verifying tree-shaking):
npm run bundle first, then use
env QWEN_CODE_NO_RELAUNCH=true node --heapsnapshot-signal=SIGUSR2 dist/cli.js
as the command. Since node is the direct pane process, PID discovery is simpler:
