From f05fe25545984c995d49f459f95381df3188cffd Mon Sep 17 00:00:00 2001 From: RealBhupesh Date: Sun, 2 Aug 2026 15:39:31 +0530 Subject: [PATCH] perf(supervisor): inspect Docker resources concurrently (#3727) --- ...ocker-resource-monitor-parallel-inspect.md | 6 +++++ apps/supervisor/src/resourceMonitor.ts | 26 +++++++++++-------- 2 files changed, 21 insertions(+), 11 deletions(-) create mode 100644 .server-changes/docker-resource-monitor-parallel-inspect.md diff --git a/.server-changes/docker-resource-monitor-parallel-inspect.md b/.server-changes/docker-resource-monitor-parallel-inspect.md new file mode 100644 index 00000000000..9ff25c750d6 --- /dev/null +++ b/.server-changes/docker-resource-monitor-parallel-inspect.md @@ -0,0 +1,6 @@ +--- +area: supervisor +type: improvement +--- + +Resource availability checks now update faster when many task containers are running. diff --git a/apps/supervisor/src/resourceMonitor.ts b/apps/supervisor/src/resourceMonitor.ts index 507a52bbf60..7cb9b0b3a22 100644 --- a/apps/supervisor/src/resourceMonitor.ts +++ b/apps/supervisor/src/resourceMonitor.ts @@ -132,17 +132,21 @@ export class DockerResourceMonitor extends ResourceMonitor { let cpuUsed = 0; let memoryUsed = 0; - for (const container of stats) { - if (container.State === "running") { - const c = this.docker.getContainer(container.Id); - const { HostConfig } = await c.inspect(); - - const cpu = this.resourceParser.cpu(HostConfig.NanoCpus ?? 0); - const memory = this.resourceParser.memory(HostConfig.Memory ?? 0); - - cpuUsed += cpu; - memoryUsed += memory; - } + const runningContainers = stats.filter((container) => container.State === "running"); + const inspectedResources = await Promise.all( + runningContainers.map(async (container) => { + const { HostConfig } = await this.docker.getContainer(container.Id).inspect(); + + return { + cpu: this.resourceParser.cpu(HostConfig.NanoCpus ?? 0), + memory: this.resourceParser.memory(HostConfig.Memory ?? 0), + }; + }) + ); + + for (const resources of inspectedResources) { + cpuUsed += resources.cpu; + memoryUsed += resources.memory; } this.cachedResources = this.applyOverrides({