Limit daemon-wide Git process pressure (#2797)

* perf(server): bound Git process starts

Git refresh bursts could keep creating short-lived processes at the concurrency ceiling, causing sustained process churn on constrained hosts. Apply one daemon-global start-rate and concurrency policy to every Git command while preserving the legacy concurrency environment variable.

* build(nix): update npm dependency hash

* fix(server): hold Git slots until process exit

* fix(server): enforce Git limits across process lifetime

* fix(server): align Git metrics with process exit

* Fix Git limiter test deadlocks

* Tune default Git process rate
This commit is contained in:
Mohamed Boudra
2026-08-02 19:59:43 +02:00
committed by GitHub
parent f682156302
commit 2e188787ff
23 changed files with 822 additions and 225 deletions
@@ -1,10 +1,13 @@
import { describe, expect, test } from "vitest";
import { GitCommandRuntimeMetricsWindow } from "./git-command-runtime-metrics.js";
function createMetricsWindow(concurrencyLimit = 2) {
function createMetricsWindow(concurrencyLimit = 2, maxProcessesPerSecond = 8) {
let now = 1_000;
return {
metrics: new GitCommandRuntimeMetricsWindow(concurrencyLimit, () => now),
metrics: new GitCommandRuntimeMetricsWindow(
{ concurrencyLimit, maxProcessesPerSecond },
() => now,
),
advance(ms: number) {
now += ms;
},
@@ -42,6 +45,7 @@ describe("GitCommandRuntimeMetricsWindow", () => {
expect(metrics.snapshotAndReset()).toMatchObject({
concurrencyLimit: 1,
maxProcessesPerSecond: 8,
active: 1,
pending: 1,
peakActive: 1,