From 5eca19840e0bb9e31d3f3ff82dad396c4e2700e2 Mon Sep 17 00:00:00 2001 From: Amir Raminfar Date: Mon, 1 Aug 2022 13:32:48 -0700 Subject: [PATCH] Fixes cpu count using online cpus. Fixes #1829 --- docker/client.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docker/client.go b/docker/client.go index 63d0fea4..899cf02a 100644 --- a/docker/client.go +++ b/docker/client.go @@ -138,14 +138,20 @@ func (d *dockerClient) ContainerStats(ctx context.Context, id string, stats chan log.Errorf("decoder for stats api returned an unknown error %v", err) } + ncpus := uint8(v.CPUStats.OnlineCPUs) + if ncpus == 0 { + ncpus = uint8(len(v.CPUStats.CPUUsage.PercpuUsage)) + } + var ( cpuDelta = float64(v.CPUStats.CPUUsage.TotalUsage) - float64(v.PreCPUStats.CPUUsage.TotalUsage) systemDelta = float64(v.CPUStats.SystemUsage) - float64(v.PreCPUStats.SystemUsage) - cpuPercent = int64((cpuDelta / systemDelta) * float64(len(v.CPUStats.CPUUsage.PercpuUsage)) * 100) + cpuPercent = int64((cpuDelta / systemDelta) * float64(ncpus) * 100) memUsage = int64(v.MemoryStats.Usage - v.MemoryStats.Stats["cache"]) memPercent = int64(float64(memUsage) / float64(v.MemoryStats.Limit) * 100) ) + if cpuPercent > 0 || memUsage > 0 { select { case <-ctx.Done():