diff --git a/daemon/stats/collector.go b/daemon/stats/collector.go index 39c76128b0..24d41a3d2e 100644 --- a/daemon/stats/collector.go +++ b/daemon/stats/collector.go @@ -57,7 +57,7 @@ func (s *Collector) Run() { // it will grow enough in first iteration var pairs []publishersPair - for range time.Tick(s.interval) { + for { // it does not make sense in the first iteration, // but saves allocations in further iterations pairs = pairs[:0] @@ -72,12 +72,6 @@ func (s *Collector) Run() { continue } - systemUsage, err := s.getSystemCPUUsage() - if err != nil { - logrus.Errorf("collecting system cpu usage: %v", err) - continue - } - onlineCPUs, err := s.getNumberOnlineCPUs() if err != nil { logrus.Errorf("collecting system online cpu count: %v", err) @@ -89,6 +83,14 @@ func (s *Collector) Run() { switch err.(type) { case nil: + // Sample system CPU usage close to container usage to avoid + // noise in metric calculations. + systemUsage, err := s.getSystemCPUUsage() + if err != nil { + logrus.WithError(err).WithField("container_id", pair.container.ID).Errorf("collecting system cpu usage") + continue + } + // FIXME: move to containerd on Linux (not Windows) stats.CPUStats.SystemUsage = systemUsage stats.CPUStats.OnlineCPUs = onlineCPUs @@ -106,6 +108,8 @@ func (s *Collector) Run() { logrus.Errorf("collecting stats for %s: %v", pair.container.ID, err) } } + + time.Sleep(s.interval) } }