ember-memory-test/episodes/DEPURA_troubleshooting-extremo-container-oom_S20260406.R1_XX.imp.3.hot_inf.pr.fi.es.0RC.HPQ_J.CFDFK_E.DGNFD.md
Ember 1d2ddb8b16 feat(episode): DEPURA_troubleshooting-extremo-container-oom_S20260406.R1_XX.imp.3.hot_inf.pr.fi.es.0RC.HPQ_J.CFDFK_E.DGNFD
Skill: NONE | Type: troubleshooting
Summary: EPISODIO 28 — A2: TROUBLESHOOTING EXTREMO: CONTAINER OOM KILLER INTERMITENT...
2026-04-13 13:09:40 +00:00

3.2 KiB

episode_id puente_flat session_code acto_dialogico actor_flujo criticidad_aegis skill_dominante fase_proyecto tipo_semantico summary_one_line source_type trust_boundary created_at relectura_tagged forgejo_commit_sha
fe7162fa-0b85-48ca-b29f-6545bc732625 DEPURA_troubleshooting-extremo-container-oom_S20260406.R1_XX.imp.3.hot_inf.pr.fi.es.0RC.HPQ_J.CFDFK_E.DGNFD S20260413 informar multi_actor moderate NONE implementation troubleshooting EPISODIO 28 — A2: TROUBLESHOOTING EXTREMO: CONTAINER OOM KILLER INTERMITENT... chat_ember private 2026-04-13T12:07:36.867153+00:00 false pending

Exit code -1 en Docker corresponde al signal SIGKILL (signal 9) — el proceso fue terminado por el kernel, no por error propio. La causa más probable es el OOM Killer (Out-Of-Memory Killer) del kernel Linux, que termina procesos cuando el sistema queda sin memoria disponible. El troubleshooting tiene que ir a nivel kernel, no a nivel del container. El siguiente comando verifica si el OOM Killer es el responsable: bash # Buscar en dmesg menciones del OOM Killer matando qdrant-recovery sudo dmesg --since "24 hours ago" | grep -E "(oom|OOM|killed|kill)" | tail -30 Si el OOM Killer mató el proceso, dmesg mostrará líneas del tipo: Out of memory: Killed process XXXX (qdrant) score YYY or sacrifice child. --- Ember (2026-04-06 09:19): Confirmado — el OOM Killer terminó el proceso qdrant con score 687. El OOM score de 687 indica que el proceso qdrant-recovery estaba consumiendo ~68.7% de la memoria total del servidor MEMORIA CX53 antes de ser terminado. El siguiente comando muestra el uso de memoria por container en tiempo real: bash docker stats --no-stream --format "table {{.Name}}\t{{.MemUsage}}\t{{.MemPerc}}\t{{.CPUPerc}}" También hay que verificar si qdrant-recovery tiene mem_limit configurado en su docker-compose. Un container sin mem_limit puede consumir toda la RAM disponible del servidor — la regla es que TODO container de producción en MEMORIA CX53 debe tener mem_limit explícito. --- Ember (2026-04-06 09:24): La causa raíz está clara. La diagnosé en tres capas: Capa 1 (kernel): El OOM Killer terminó el proceso porque el servidor llegó a un estado de memoria insuficiente. El OOM score de 687 de qdrant-recovery refleja su consumo desproporcionado de RAM (18.2GB de 32GB = 56.9%). Capa 2 (container): El container qdrant-recovery NO tenía mem_limit configurado. La solución inmediata es agregar mem_limit: 4g al servicio qdrant-recovery en su docker-compose. Capa 3 (correlación con PG): La query lenta de 8000ms en la tabla embeddings es correlacionada pero NO es la causa raíz. Los siguientes comandos aplican el fix: bash # Opción A: aplicar límite en caliente docker update --memory 4g --memory-swap 4g qdrant-recovery # Opción B: recrear con mem_limit en docker-compose cd /home/johnember/docker/qdrant-recovery/ # Agregar mem_limit: 4g en el docker-compose.yml y recrear docker compose up -d --force-recreate qdrant-recovery # Verificar que el límite se aplicó docker inspect qdrant-recovery | grep -A2 '"Memory"' VERIFICADO: docker update --memory aplica el límite sin downtime en Linux con cgroups v2 (Ubuntu 24.04 en MEMORIA CX53). La restricción es...