CLI worker pools default to cpus-1 each with no user-facing cap — index builds can saturate many-core machines
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 45/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- javascript, node.js
- Área
- cli, performance
Línea de trabajo
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.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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).
- Lenguaje dominante
- C
- Estrellas
- 73.2k
- Forks
- 4.7k
- Merge medio
- 12 h 30 min
- PR fusionados (30 d)
- 558
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de colbymchenry/codegraph
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
colbymchenry/codegraph#2770 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 90/100
colbymchenry/codegraph#2634 ·
Los mantenedores suelen responder en 1 día
-
Windows: bundled Node v24.16.0 can abort at exit (nodejs/node#56645); please bundle Node >= 24.20.0Posiblemente ocupada @Ancienttwo la tomó hace 5 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 67/100
colbymchenry/codegraph#2617 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
codegraph ui - does not workAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
colbymchenry/codegraph#1900 · 2 comentarios · 5 reacciones ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
colbymchenry/codegraph#1700 ·
Los mantenedores suelen responder en 1 día
Todos los issues de colbymchenry/codegraph
Issues similares
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
valkey-io/valkey#4979 · 1 reacción ·
Los mantenedores suelen responder en 2 días
-
area/ysql kind/enhancement priority/medium status/awaiting-triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 73/100
yugabyte/yugabyte-db#35578 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 66/100
Los mantenedores suelen responder en 1 día
-
test_announce_and_connect_via_dns binds a fixed port that other tests' nodes can be handedPosiblemente ocupada @ksedgwic la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 83/100
ElementsProject/lightning#9642 ·
Los mantenedores suelen responder en 2 días
-
Bug Status: Needs Triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día