iowait alto = cuello de botella en disco.ps aux revela scripts automatizados, usuarios root y tiempos de CPU.Carga 8.28 en 4 cores = 207% de saturación — el doble de procesos esperando CPU de los que pueden ejecutarse simultáneamente.
top — load average 0.36, 0.44, 0.25 en sistema de 2 cores: muy desahogadoPara confirmar qué proceso causa la carga, usa ps aux | grep <proceso> para ver PID, usuario, %CPU y tiempo acumulado. Si el proceso padre ya terminó, usa ps -fp <PID> para ver el PPID y rastrear el origen (cron, script de init, logrotate…).
sudo apt update
sudo apt install -y htop iotop net-tools procps sysstat ncdu
sudo dnf install -y htop iotop net-tools procps-ng sysstat
# o con yum:
sudo yum install -y htop iotop net-tools procps-ng sysstat
netstat viene en net-tools. En sistemas modernos se recomienda ss (parte de iproute2, instalado por defecto) como alternativa más rápida y completa.top # modo interactivo
top -b -n1 | head -n 20 # snapshot no interactivo
| Tecla | Acción en modo interactivo |
|---|---|
| P | Ordenar por uso de CPU |
| M | Ordenar por uso de memoria — observa %MEM, RES, VIRT, COMMAND |
| 1 | Mostrar cada núcleo de CPU por separado |
| u | Filtrar procesos por usuario |
| k | Matar proceso por PID |
top con barras de CPU por núcleo, colores por tipo de carga y atajos de teclado avanzados.htop # arrancar
htop -u root # ver solo procesos de root
Colores de las barras de CPU
Atajos de teclado útiles
| Tecla | Acción |
|---|---|
| F6 | Ordenar lista por CPU, mem, time… |
| F3 | Buscar proceso por nombre |
| F5 | Mostrar árbol de procesos (herencia de recursos) |
| F9 | Matar proceso — seleccionar señal |
| F2 | Configurar columnas visibles |
sudo iotop # modo interactivo
sudo iotop -o -P # -o solo procesos con I/O activo, -P muestra PIDs
sudo iotop -b -n5 # batch: 5 muestras no interactivas (ideal para scripts)
dd (TID 8121) escribiendo a 209 MB/s — único responsable de toda la actividad de discoDemostración práctica — generar I/O de prueba
# Escribe 5 GB directamente al disco (sin caché)
dd if=/dev/zero of=/tmp/testfile_grande bs=1M count=5000 oflag=direct
# Ver qué PID genera la escritura
sudo iotop -o
# El PID del proceso dd aparecerá con alto DISK WRITE
pidstat -d (paquete sysstat) como alternativa.df -hT # human readable + tipo de FS
df -h /var # espacio en /var
df -i # uso de inodos (importante en /var/log)
sudo du -sh /var/log # tamaño total de /var/log
sudo du -ah /var | sort -rh | head -n 20 # 20 más grandes
sudo du --max-depth=1 -h /home # resumen por subdirectorios
sudo find / -type f -size +100M -exec ls -lh {} \; 2>/dev/null # archivos >100MB
sudo apt install ncdu
sudo ncdu / # escanea todo el sistema (tarda unos segundos)
Navegación: ↑↓ para moverse · Enter para entrar en un directorio · ← para retroceder · d para borrar (con confirmación) · ? para ayuda. Los directorios se ordenan automáticamente por tamaño — los más grandes arriba.
ncdu / — navegación visual del disco con barras de porcentaje por directorioss es el reemplazo moderno de netstat. Ambos muestran conexiones activas, puertos en escucha y el proceso responsable.sudo ss -tulpen # TCP+UDP en escucha con PID y usuario
sudo ss -ltnp # -l LISTEN · -t TCP · -n números · -p PID
ss -s # resumen de estadísticas
ss -tn state established # conexiones TCP activas
sudo ss -tulpen — puertos en escucha con proceso, PID y UID del usuario propietariosudo netstat -antp # conexiones TCP activas
sudo netstat -tulnp # puertos en escucha con proceso
sudo lsof -i -P -n | grep LISTEN # alternativa con lsof
netstat -antp — conexiones TCP con estado y procesonetstat -tulnp — puertos en escucha: puerto 80 → nginx, puerto 22 → sshdss -tn state established — conexiones TCP activas (estado ESTABLISHED)8125/19999 → netdata · 53 → systemd-resolve (DNS local) · 5353/41136 → avahi-daemon (mDNS) · 631 → cupsd (impresión)# Descarga el script y ejecútalo (dos pasos — evita problemas de shell)
curl -sSL https://get.netdata.cloud/kickstart.sh -o kickstart.sh
sudo bash kickstart.sh
# Iniciar y habilitar al arranque
sudo systemctl enable --now netdata
# Verificar estado
sudo systemctl status netdata
# Abrir en navegador
# → http://localhost:19999
Qué mirar en el dashboard
iowait alto = CPU esperando disco → problema de I/O, no de CPU. Distingue entre user (aplicaciones), system (kernel) e iowait.
Si el swap crece constantemente → el sistema se está quedando sin RAM física. La latencia se degrada severamente al paginar en disco.
Latencia > 50ms o utilización al 100% = disco saturado. Observa lecturas/escrituras por segundo (r/s, w/s).
Picos inesperados de tráfico pueden indicar actividad maliciosa. Drops/Errors crecientes = problema en tarjeta de red o configuración.
Códigos 5xx en aumento = error grave en servidor. Revisa conexiones activas vs máximas en MySQL, y workers activos en Apache/Nginx. Consultas lentas en DB = cuello de botella de aplicación.
# Tunnel SSH: Netdata no queda expuesto a la red pública
ssh -L 19999:localhost:19999 usuario@servidor
# → Abre http://localhost:19999 en tu navegador local
sudo apt install python3-pip pipx -y
pipx install glances
pipx inject glances fastapi # dependencia web
pipx inject glances jinja2 # renderizado de página
pipx ensurepath
source ~/.bashrc
glances # modo terminal (h=ayuda, q=salir)
glances -w -B 0.0.0.0 # modo web accesible desde red local → :61208
# desde la misma VM: http://127.0.0.1:61208
# desde el host: http://<IP_VM>:61208
# Abrir puerto en UFW si es necesario
sudo ufw allow 61208/tcp
http://192.168.1.44:61208sudo apt install stress stress-ng -y
$(nproc) para todos los núcleos.stress --cpu $(nproc) --timeout 300sstress --io 4 --timeout 20sstress --vm 2 --vm-bytes 512M --timeout 15sstress --hdd 1 --hdd-bytes 2G --timeout 10s# Terminal 1: genera carga mixta (CPU + I/O + RAM) durante 30s
stress --cpu 4 --io 2 --vm 2 --vm-bytes 256M --timeout 30s
# Terminal 2: observa en htop
htop
timeout 5m bash -c 'for i in $(seq $(nproc)); do yes > /dev/null & done; wait'
# Lanza un proceso yes por cada núcleo → los mata automáticamente a los 5 min
sudo iotop -odf -h para ver % usado. du -ah /var | sort -rh | head -n 20 para localizar archivos grandes.ss -tn state established | wc -l — un número muy alto puede saturar el servidor.strace -p <PID> (avanzado).