Procesos y servicios (RSA-05)

La ruta del SysAdmin 15 de jul. de 2025

Este apartado te permite entender qué está corriendo en tu sistema Linux, cómo gestionarlo, y cómo controlar el impacto de cada proceso o servicio en el rendimiento general.

Incluye herramientas tanto para intervención directa como para monitorización avanzada (CPU, RAM, disco, red y Docker).


Visualizar procesos del sistema

Comandos básicos

$ ps aux                # Lista todos los procesos
$ ps -ef                # Otra vista estándar
$ ps -u luisgulo            # Filtra por usuario
$ ps -C firefox         # Filtra por nombre

Jerarquía de procesos

$ pstree                # Muestra árbol de procesos
$ pstree -p             # Incluye PID

Proceso por ID

$ ps -p 1234 -o pid,%cpu,%mem,cmd

Controlar procesos

kill / killall

# kill 1234             # Finaliza por PID
# kill -9 1234          # Forza el cierre
# killall firefox       # Finaliza todos con ese nombre

nice / renice

$ nice -n 10 mi_script.sh      # Ejecuta con menor prioridad
# renice -n 5 -p 1234          # Cambia prioridad de proceso

Monitorización clásica en consola

top

$ top
  • M para ordenar por RAM
  • P para ordenar por CPU

htop (interactivo y visual)

$ htop

→ Flechas para navegar, F9 para matar procesos


Monitorización avanzada del sistema

ComandoDescripción
vmstatEstadísticas de procesos y memoria
iostatActividad de disco
iotopE/S por proceso
pidstatCPU/RAM por PID
mpstatUso por núcleo
dstatCombinación de CPU, RAM, red
glancesMonitor integral interactivo

Ejemplos:

$ vmstat 2 5             # Cada 2s, 5 veces
$ iostat -x 1 3          # Disco extendido
$ pidstat -p 1234        # Proceso individual
$ glances                # Vista completa del sistema

Comando: pidstat

Sintaxis Básica

Muestra estadísticas de uso de CPU, memoria y actividad de procesos individuales.

Ejemplos:

$ pidstat
$ pidstat 1 5    # Actualiza cada segundo durante 5 intervalos
$ pidstat -u    # Muestra uso de CPU por proceso

Sintaxis Avanzada

Ideal para diagnósticos precisos por PID, análisis histórico y registros de carga por proceso.

Ejemplos:

$ pidstat -r -p $(pgrep apache2) > memoria_apache.log
$ pidstat -u -h | grep "python"
$ for p in $(pgrep nginx); do pidstat -d -p "$p"; done

Comando: vmstat

Sintaxis Básica

Muestra información resumida sobre procesos, memoria, intercambio (swap), E/S y CPU.

Ejemplos:

$ vmstat
$ vmstat 2 5    # Actualiza cada 2 segundos, 5 veces
$ vmstat -s     # Modo resumen con estadísticas totales

Sintaxis Avanzada

Usado en diagnósticos de cuellos de botella de rendimiento, latencia de disco o presión de memoria.

Ejemplos:

$ vmstat -w 1 | tee registro_vmstat.txt
$ vmstat | awk '{ if ($3 > 1000) print "Alerta de memoria libre baja" }'
$ vmstat -a | grep -E "cache|swap"

Comando: systemd-cgtop

Sintaxis Básica

Monitoriza el uso de recursos por grupo de control (cgroup) en sistemas que utilizan systemd.

Ejemplos:

$ systemd-cgtop
$ systemd-cgtop -n 5    # Muestra 5 actualizaciones
$ systemd-cgtop -p    # Muestra porcentajes en vez de valores absolutos

Sintaxis Avanzada

Ideal para entornos con contenedores, servicios divididos por cgroups, y para identificar qué unidad systemd consume más.

Ejemplos:

$ systemd-cgtop -M nombre_maquina    # Para máquinas virtualizadas vía machinectl
$ systemd-cgtop | grep "user.slice"
$ systemd-cgtop -c | tee resumen_cgroups.txt

Monitorización de red

$ ss -tuln               # Puertos en escucha
$ iftop                  # Actividad de red por IP
$ nload                  # Tráfico en tiempo real
$ ip -s link             # Estadísticas por interfaz
$ bmon                   # Gráficos en consola por red

Administrar servicios en Linux

Comando: systemctl (systemd)

# systemctl start apache2       # Inicia servicio
# systemctl stop apache2        # Detiene servicio
# systemctl restart apache2     # Reinicia servicio
# systemctl status apache2      # Estado actual

Activar/desactivar al inicio:

# systemctl enable docker
# systemctl disable cups

Listar todos los servicios activos:

# systemctl list-units --type=service

Logs de servicios

journalctl

$ journalctl -u nginx              # Logs de nginx
$ journalctl -xe                  # Últimos errores
$ journalctl --since "1 hour ago"

Rendimiento y arranque

systemd-analyze

$ systemd-analyze                 # Tiempo total de arranque
$ systemd-analyze blame          # Servicios más lentos

Monitorización de Docker

docker stats

$ docker stats

→ Muestra CPU, RAM, disco y red por contenedor.

docker system df

$ docker system df

→ Uso de espacio por imágenes, contenedores y volúmenes.

docker top

$ docker container top nginx

→ Ver procesos dentro del contenedor.

htop y ps con Docker

$ ps aux | grep docker
$ htop   # Buscar procesos "dockerd", "containerd"

Acceso directo a métricas de cgroup

$ cat /sys/fs/cgroup/memory/docker/<ID>/memory.usage_in_bytes
$ cat /sys/fs/cgroup/cpu/docker/<ID>/cpuacct.usage

Tabla resumen de herramientas de monitorización

ÁreaHerramientaDescripción
CPU/RAMtop, htopProcesos en tiempo real
Disco I/Oiotop, iostatActividad de escritura/lectura
Rediftop, nloadTráfico por interfaz o IP
Serviciossystemctl, journalctlControl de servicios
Árbol de procesospstreeRelación jerárquica
Dockerdocker stats, glances, docker topConsumo por contenedor

Monitorización avanzada con Prometheus + cAdvisor

Si necesitas análisis de rendimiento, alertas personalizadas y gráficos históricos sobre tus contenedores o tu sistema, la combinación de Prometheus + cAdvisor es una solución ideal.

Pasos para integrarlos en un entorno sencillo.


¿Qué es cada herramienta?

HerramientaFunción principal
cAdvisorExpone métricas de contenedores Docker en tiempo real
PrometheusRecolecta métricas de múltiples fuentes y las almacena
Grafana(Opcional) Visualiza datos Prometheus en paneles interactivos

1. Ejecutar cAdvisor como contenedor Docker

$ docker run -d \
  --name=cadvisor \
  --volume=/:/rootfs:ro \
  --volume=/var/run:/var/run:ro \
  --volume=/sys:/sys:ro \
  --volume=/var/lib/docker/:/var/lib/docker:ro \
  -p 8080:8080 \
  google/cadvisor:latest
  • cAdvisor quedará accesible en: http://localhost:8080
  • Muestra CPU, RAM, disco, red y procesos por contenedor

2. Configurar Prometheus

Crear archivo de configuración prometheus.yml:

global:
  scrape_interval: 5s

scrape_configs:
  - job_name: 'cadvisor'
    static_configs:
      - targets: ['host.docker.internal:8080']

Ejecutar Prometheus en Docker:

$ docker run -d \
  --name=prometheus \
  -p 9090:9090 \
  -v $PWD/prometheus.yml:/etc/prometheus/prometheus.yml \
  prom/prometheus
  • Accede a la consola en: http://localhost:9090

3. Consultar métricas útiles en Prometheus

container_cpu_usage_seconds_total
container_memory_usage_bytes
container_network_transmit_bytes_total
container_fs_usage_bytes

4. Visualizar con Grafana (opcional)

$ docker run -d \
  -p 3000:3000 \
  --name=grafana \
  grafana/grafana
  • Accede a http://localhost:3000 (usuario/pass: admin/admin)
  • Añade Prometheus como fuente de datos
  • Usa dashboards de la comunidad para visualizar métricas Docker

Recomendaciones

  • Define scrape_interval y retention adecuados según tu uso
  • Protege puertos públicos con firewall o autenticación
  • Exporta alertas desde Prometheus si quieres monitoreo proactivo

Etiquetas

Luis GuLo

🐧 SysAdmin GNU/Linux - 🐳 Docker - 🖥️ Bash Scripting - 🐪 Perl - 🐬 MySQL - 👥 Formador de TI - 👥 Formador de SysAdmin's - 💢 Ansible - ☁️ Cloud Computing - ❤️ Debian GNU/Linux