CLI worker pools default to cpus-1 each with no user-facing cap — index builds can saturate many-core machines
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 45/100
- Tipo di issue
- Funzionalità
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- javascript, node.js
- Ambito
- cli, performance
Direzione di ricerca
The report names lib/dist/extraction/parse-pool.js, lib/dist/mcp/query-pool.js, lib/dist/resolution/resolver-pool.js, the README, and CLI help for index and init. Start by reading how those pools resolve their sizes and where configuration and verbose startup output are handled. Done means the existing environment knobs are documented and a user-facing thread limit bounds aggregate worker usage, with resolved pool sizes shown at startup.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Title: CLI worker pools default to cpus-1 each with no user-facing cap — index builds can saturate many-core machines
Type: enhancement (missing resource-control knob) + documentation gap
Environment
- macOS, Apple Silicon (darwin-arm64), 18 logical CPUs, 47 GB RAM
@colbymchenry/codegraphv1.6.1, global npm install (~/.codegraph/versions/v1.6.1, node CLI)
Observed behavior
- A co-installed VS Code extension's native engine saturated my whole machine during a full index (load average 38 on 18 cores, ~1700 %CPU in
ps). I reported that to its own maintainers separately — but on inspecting the CLI's source I found the same unbounded-pool pattern here, and throttled proactively. I have not isolated a CLI-only runaway reproduction; this report is about the configuration gap, not a claim of a CLI crash.
Findings (from the installed v1.6.1 source)
Three independently-sized worker pools, each defaulting to cpus - 1:
lib/dist/extraction/parse-pool.js—resolveParsePoolSize(envVal, cpuCount)returnsMath.max(1, Math.min(cpuCount - 1, DEFAULT_PARSE_POOL_CAP))→ 17 parse workers on an 18-core machine.lib/dist/mcp/query-pool.js—resolvePoolSize(envVal, cpuCount)returnsMath.max(1, Math.min(cpuCount - 1, MAX_POOL_SIZE))→ 17 query workers.lib/dist/resolution/resolver-pool.js—ResolverPool.resolvePoolSizesizes its own pool fromos.availableParallelism().
Because these run concurrently during index / init, the pools can collectively occupy every core, leaving no headroom — the machine is unresponsive for the duration of the build.
Working but undiscoverable knobs — these exist in code but are not documented anywhere I could find:
| Env var | Effect | Where |
|---|---|---|
CODEGRAPH_PARSE_POOL_SIZE |
caps the parse pool | extraction/parse-pool.js |
CODEGRAPH_QUERY_POOL_SIZE |
caps the query pool (0 = disable, serve reads in-process) | mcp/query-pool.js |
CODEGRAPH_PARALLEL_RESOLVE_MIN |
minimum refs before the resolver pool engages | resolution/resolver-pool.js |
CODEGRAPH_NO_PARALLEL_RESOLVE=1 |
kill switch, sequential resolution | resolution/resolver-pool.js |
There is no equivalent in user-facing config: codegraph index --help and codegraph init --help expose no thread/worker option, and codegraph.json (project config) has no thread setting.
Requests
- Document the env knobs above in the README — they are the only cap that exists today, and I only found them by grepping
lib/dist. - Add a first-class limit — e.g.
maxThreadsincodegraph.jsonand/or a--threadsflag onindex/init/sync— applied across all pools together (parse + query + resolve + embedding), so one number bounds total engine CPU. - Default to leaving headroom.
cpus - 1per pool is reasonable for one pool; with three pools running concurrently the sum can hit the full core count. Either size pools from a budget (total ≤ ½ or ¾ of cores) or cap the aggregate. --verbosealready prints worker lifecycle/memory info — please also print the resolved pool sizes at startup so users can confirm the cap took effect.
Current workaround (verified working) — export CODEGRAPH_PARSE_POOL_SIZE=5 and CODEGRAPH_QUERY_POOL_SIZE=4 (rayon/tokio env vars do not apply to this Node CLI; those are only for the native Rust engine build).
- Lingua principale
- C
- Stelle
- 73.2k
- Fork
- 4.7k
- Merge medio
- 2h 16m
- PR unite (30g)
- 423
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di colbymchenry/codegraph
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 90/100
colbymchenry/codegraph#2634 ·
I maintainer di solito rispondono entro 1 giorno
-
Windows: bundled Node v24.16.0 can abort at exit (nodejs/node#56645); please bundle Node >= 24.20.0Forse già presa @Ancienttwo l’ha presa 3 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 67/100
colbymchenry/codegraph#2617 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Invalid regular expression: /\boperator++\s*(?:<[^<>()]*>)?\s*\(/: Nothing to repeat (v1.6.2)Aperta
Difficoltà 2/5 Meno di un'ora Idoneità per principianti 72/100
colbymchenry/codegraph#2482 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
codegraph ui - does not workAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
colbymchenry/codegraph#1900 · 2 commenti · 5 reazioni ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
colbymchenry/codegraph#1700 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di colbymchenry/codegraph
Issue simili
-
os:linux
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
mpv-player/mpv#18649 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
facebookincubator/muse-gadget-sdk#249 ·
I maintainer di solito rispondono entro 1 giorno
-
docs: nng_dial / nng_dialer_start can return NNG_ECONNSHUT and NNG_ECRYPTO, which are not documentedAperta
Difficoltà 1/5 1-3 ore Idoneità per principianti 89/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
micropython/micropython#19786 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
vercel-labs/zerolang#442 ·