From ad531c6dfc157bef7a6a5e2b163d907061616d1e Mon Sep 17 00:00:00 2001 From: Lizandro Guarnizo <77708265+lizandrogd@users.noreply.github.com> Date: Thu, 25 Jun 2026 10:34:46 -0500 Subject: [PATCH] perf(agent): sort top procs by RAM only, skip per-process CPUPercent CPUPercent() on every process reads /proc//stat for all processes, causing ~19% CPU spike on servers with many containers. Sorting by RAM is a single /proc read per process and much cheaper. Co-Authored-By: Claude Sonnet 4.6 --- agent/main.go | 14 ++++++-------- resources/views/servidor_dashboard.html | 12 ++++-------- 2 files changed, 10 insertions(+), 16 deletions(-) diff --git a/agent/main.go b/agent/main.go index c4309c7..df5a8f7 100644 --- a/agent/main.go +++ b/agent/main.go @@ -245,17 +245,15 @@ func collectMetrics() (*Metricas, error) { m.TCPConns = len(conns) } - // Top 10 procesos por CPU (luego por RAM como desempate) + // Top 10 procesos por RAM (CPUPercent por proceso es muy costoso en sistemas con muchos contenedores) if procs, err := process.Processes(); err == nil { type pd struct { pid int32 name string - cpu float64 ramMB float64 } var lista []pd for _, p := range procs { - cpuPct, _ := p.CPUPercent() name, _ := p.Name() if name == "" { continue @@ -264,12 +262,12 @@ func collectMetrics() (*Metricas, error) { if mi, err := p.MemoryInfo(); err == nil && mi != nil { ramMB = round2(float64(mi.RSS) / (1024 * 1024)) } - lista = append(lista, pd{p.Pid, name, round2(cpuPct), ramMB}) + if ramMB < 1 { + continue + } + lista = append(lista, pd{p.Pid, name, ramMB}) } sort.Slice(lista, func(i, j int) bool { - if lista[i].cpu != lista[j].cpu { - return lista[i].cpu > lista[j].cpu - } return lista[i].ramMB > lista[j].ramMB }) limit := 10 @@ -277,7 +275,7 @@ func collectMetrics() (*Metricas, error) { limit = len(lista) } for _, d := range lista[:limit] { - m.TopProcs = append(m.TopProcs, ProcesoInfo{d.pid, d.name, d.cpu, d.ramMB}) + m.TopProcs = append(m.TopProcs, ProcesoInfo{d.pid, d.name, 0, d.ramMB}) } } diff --git a/resources/views/servidor_dashboard.html b/resources/views/servidor_dashboard.html index a362114..a1deb35 100644 --- a/resources/views/servidor_dashboard.html +++ b/resources/views/servidor_dashboard.html @@ -155,24 +155,20 @@