Ficha — 5.5 · Capacidad base y recursos
- ID de prueba: CAPACIDAD-BASE-01 (criterio 5.5)
- Fecha y hora: 2026-10-10, 17:36 a 19:00 UTC (métricas de Render antes, durante y después de la carga y el estrés)
- Ejecutado por: subagente
ejecutor-pruebas-trl(Claude Opus 5.5),render-nara.js metricas(solo lectura) - Entorno y tamaño: Render
nara-apiplan1c-2g(1 CPU / 2 GB), Ohio, una instancia. Vercelnara-webdelante. Atlasnara(plan no documentado, sin métricas). - Versiones: la capacidad con la mezcla realista se evalúa con el tramo de la carga previo al despliegue (18:06:30–18:20:44Z,
nara-api92d7f73, instancia…-nl5hq). El estrés y la carga de recuperación quedaron enteros sobredcef48e(instancia…-kf244, desde 18:22Z). Los dos números de capacidad no son de la misma versión. - Resultado: Parcial — hay número de capacidad y gráficas del servidor, pero no hay gráficas de la base de datos (sin acceso a Atlas) y la latencia del lado del servidor no se pudo leer.
Capacidad base (usuarios simultáneos que cumplen p95 < 2 s y errores < 1 %)
| Perfil | Versión | Capacidad | Fuente |
|---|---|---|---|
Mezcla realista (6 expertos, 7 clínicos, 6 observadores, 46 pacientes; incluye /api/app-state) |
92d7f73 |
65 usuarios, al límite: meseta de 5 min a 65 antes del despliegue, p95 1.874 ms, 0 errores; 4 de 11 tramos de 30 s con p95 ≥ 2 s | ../5.4-6.4_carga/analisis_por_version.txt, analisis_30s.txt |
| La misma mezcla, meseta de 3 min | dcef48e |
65 usuarios: p95 1.481 ms, 0 errores | ../6.6_recuperacion/analisis_meseta.txt |
| Clínico, 3 rutas ligeras (script de estrés) | dcef48e |
≈ 111 usuarios (p95 1.577 ms con 111; 2.122 ms con 127) | ../6.5_estres/analisis_30s.txt |
Throughput máximo de la API: ≈ 55 peticiones/s (3.300–3.380/min en Render), plano desde ≈ 277 VUs.
Recursos (Render)
| Momento | Versión | CPU (fracción de 1 CPU) | Memoria |
|---|---|---|---|
| Línea base 17:36–18:06Z | 92d7f73 |
0,0002–0,015 | 350–370 MB |
| Carga, meseta 26 VUs | 92d7f73 |
0,055–0,085 | 410–518 MB |
| Carga, meseta 65 VUs (18:15–18:20Z) | 92d7f73 |
0,109–0,162 | 526–682 MB |
| Despliegue (18:21–18:23Z) | cambio | instancia nueva 0,063 → 0,002 | …-nl5hq 684 MB → …-kf244 366–455 MB |
| Estrés, 111–344 VUs | dcef48e |
0,12–0,218 (máx.) | 489–643 MB |
| Tras el estrés (18:47–18:51Z) | dcef48e |
0,007–0,010 | 583 → 493 MB (baja sola) |
| Carga de recuperación 65 VUs | dcef48e |
0,075–0,186 | 526–694 MB |
Ni la CPU ni la memoria de Render se acercan a su límite cuando la latencia ya pasa de 2 s: el cuello no es el cómputo de Render (ver 6.5).
Evidencia
linea_base_{cpu,memoria,peticiones}.json, linea_base_latencia.json (error 400 de Render: falta quantile), carga_*.json, estres_*.json, despues_*.json; gráficas ../5.4-6.4_carga/grafica_carga.svg y ../6.5_estres/grafica_estres.svg.
Limitaciones
- Sin métricas de Atlas (conexiones, operaciones, CPU de la base): no se cumple «gráficas de la base».
render-nara.js metricas latenciano funciona (Render exigequantile); la latencia es solo la del cliente (k6).- Generador único en red doméstica; versiones distintas entre carga y estrés.