# ECS Web Runtime Density Matrix (July 2026)

Illustrative ranges for typical JSON APIs — measure your app under load.

| Runtime | Memory/worker (typ.) | Prefer when |
| --- | --- | --- |
| Nginx + PHP-FPM | 20–50 MB | Battle-tested PHP; separate static/proxy |
| FrankenPHP worker | 50–80 MB | Laravel/Symfony + persistent workers + HTTP/3 |
| Node (Express/Fastify) | 80–150 MB base | JS team; I/O-bound BFF |
| Python (uvicorn) | Higher than Go | ML-adjacent / FastAPI team |
| Go net/http | 10–30 MB base | Max Fargate density / CPU-bound |

## Monday checks

- [ ] Size `pm.max_children` or worker count from **measured** RSS, not blog defaults
- [ ] Prefer more small tasks over one huge task on Fargate
- [ ] Terminate TLS at CloudFront/ALB unless you need app-level HTTP/3
- [ ] FrankenPHP worker mode: enforce max_requests + no request-scoped globals
