Procesos y servicios (RSA-05)
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 RAMP
para ordenar por CPU
htop (interactivo y visual)
$ htop
→ Flechas para navegar, F9
para matar procesos
Monitorización avanzada del sistema
Comando | Descripción |
---|---|
vmstat | Estadísticas de procesos y memoria |
iostat | Actividad de disco |
iotop | E/S por proceso |
pidstat | CPU/RAM por PID |
mpstat | Uso por núcleo |
dstat | Combinación de CPU, RAM, red |
glances | Monitor 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
Área | Herramienta | Descripción |
---|---|---|
CPU/RAM | top , htop | Procesos en tiempo real |
Disco I/O | iotop , iostat | Actividad de escritura/lectura |
Red | iftop , nload | Tráfico por interfaz o IP |
Servicios | systemctl , journalctl | Control de servicios |
Árbol de procesos | pstree | Relación jerárquica |
Docker | docker stats , glances , docker top | Consumo 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?
Herramienta | Función principal |
---|---|
cAdvisor | Expone métricas de contenedores Docker en tiempo real |
Prometheus | Recolecta 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
yretention
adecuados según tu uso - Protege puertos públicos con firewall o autenticación
- Exporta alertas desde Prometheus si quieres monitoreo proactivo