Gestión de Procesos y Recursos
ps, htop, señales, nohup y límites de recursos en Linux: gestiona workers web de Python, procesos Celery y scripts de larga ejecución sin zombies huérfanos ni cierres por falta de memoria (OOM kills).
Busca en todas las páginas de la documentación
ps, htop, señales, nohup y límites de recursos en Linux: gestiona workers web de Python, procesos Celery y scripts de larga ejecución sin zombies huérfanos ni cierres por falta de memoria (OOM kills).
pgrep -af "uvicorn|celery|gunicorn"
kill -TERM <pid>
sleep 5
kill -KILL <pid> # solo si todavía está en ejecución
htop -p <pid>Cuándo usar esto:
# Buscar el maestro y los workers de billing-api
pgrep -af gunicorn
# Recarga elegante (si está configurado USR2/HUP) o TERM
sudo kill -TERM "$(pgrep -f 'gunicorn.*billing-api' | head -1)"
sleep 10
sudo ss -tlnp | grep 8000
# Comprobar archivos abiertos por fuga de conexiones
PID=$(pgrep -f 'uvicorn app.main:app' | head -1)
ls -l /proc/$PID/fd | wc -l
cat /proc/$PID/limits | grep "open files"Lo que esto demuestra:
pgrep -af muestra la línea de comandos completa para procesos de Python/proc para fugas de descriptores de archivo (fd)| Señal | Efecto en el servicio Python |
|---|---|
| SIGTERM | Uvicorn/Gunicorn deja de aceptar; vacía las solicitudes |
| SIGINT | Igual que Ctrl+C en desarrollo en primer plano |
| SIGHUP | Recarga la configuración en algunos daemons |
| SIGKILL | Muerte inmediata - sin bloques finally |
# La aplicación registra un manejador SIGTERM para la limpieza
import signal
def handle_term(signum, frame):
close_db_pool()
signal.signal(signal.SIGTERM, handle_term)ps -fp.dmesg de OOM - Reinicios misteriosos. Solución: dmesg -T | rg -i oom.ulimit demasiado bajo - "Demasiados archivos abiertos" bajo carga. Solución: LimitNOFILE en systemd.| Alternativa | Usar Cuando | No Usar Cuando |
|---|---|---|
| systemd restart | Servicios de producción | Experimento local rápido |
| Docker stop | Período de gracia del contenedor | VM bare metal |
| Kubernetes delete pod | Rollouts orquestados | Solución de problemas SSH |
| py-spy | Muestreo de Python atascado | Un reinicio simple es suficiente |
Coincidir con el tiempo de espera de vaciado del balanceador de carga upstream, a menudo 10-30s para APIs.
Un proceso por CPU con --workers N bajo gunicorn; cada uno aparece en pgrep.
celery control shutdown o TERM worker; permitir que las tareas acks_late finalicen.
nice -n 10 uv run python batch.py reduce la contención de CPU con la API en la misma VM.
systemd-run -p MemoryMax=2G ... limita un worker descontrolado en un host compartido.
Último recurso para rendimiento/depuración - sobrecarga enorme; prueba py-spy primero.
ss para puertos de escucha; lsof -p para archivos/sockets abiertos por PID.
Alta carga con baja CPU puede ser espera de IO - comprueba iostat.
Identifica el padre con ps -o ppid= -p ZPID; reinicia el proceso padre.
La columna available en free -h es más importante que la lectura de caché free.
Versiones de Stack: Esta página fue escrita para Python 3.14.0 (estable 3.14, mantenimiento 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+, y uv 0.6+.
Revisado por Chris St. John·Última actualización: 16 jul 2026