diff --git a/agent/main.go b/agent/main.go index df5a8f7..6ccf5d5 100644 --- a/agent/main.go +++ b/agent/main.go @@ -245,10 +245,10 @@ func collectMetrics() (*Metricas, error) { m.TCPConns = len(conns) } - // Top 10 procesos por RAM (CPUPercent por proceso es muy costoso en sistemas con muchos contenedores) + // Top 10 procesos: filtrar por RAM primero (barato), luego leer CPU solo en esos 10 if procs, err := process.Processes(); err == nil { type pd struct { - pid int32 + proc *process.Process name string ramMB float64 } @@ -265,7 +265,7 @@ func collectMetrics() (*Metricas, error) { if ramMB < 1 { continue } - lista = append(lista, pd{p.Pid, name, ramMB}) + lista = append(lista, pd{p, name, ramMB}) } sort.Slice(lista, func(i, j int) bool { return lista[i].ramMB > lista[j].ramMB @@ -275,7 +275,8 @@ func collectMetrics() (*Metricas, error) { limit = len(lista) } for _, d := range lista[:limit] { - m.TopProcs = append(m.TopProcs, ProcesoInfo{d.pid, d.name, 0, d.ramMB}) + cpuPct, _ := d.proc.CPUPercent() // solo 10 lecturas, no cientos + m.TopProcs = append(m.TopProcs, ProcesoInfo{d.proc.Pid, d.name, round2(cpuPct), d.ramMB}) } } diff --git a/resources/views/servidor_dashboard.html b/resources/views/servidor_dashboard.html index a1deb35..fbd8b66 100644 --- a/resources/views/servidor_dashboard.html +++ b/resources/views/servidor_dashboard.html @@ -162,13 +162,17 @@ +
ProcesoCPU% RAM