Notes from running apps
What web apps really use in containers, how fast they start and how to run them well, with the numbers we measured.

How much memory does a PostgreSQL connection use? Postgres 18, 1 to 300 connections, measured
We opened up to 300 connections to PostgreSQL 18 in a container: 1.56 MiB each when idle, 3.4 to 3.8 MiB once they have read 100 tables or prepared statements. 64 busy connections got a 256 MB container killed with every connection in it; 200 clients through PgBouncer used 132 MiB instead of 715 MiB. The numbers, the setup and how to size a pool.

Cold starts measured: how long Python, PHP, Java, Spring Boot and .NET take to answer the first request
We timed docker run to the first HTTP 200 for the same hello-world app 72 times. PHP and plain Java answer in about a third of a second, .NET and FastAPI in 0.6 to 0.7 s, Spring Boot in 2.1 s. A CDS archive cut Spring Boot to 1.17 s; ReadyToRun did nothing for .NET. Memory limits didn't change start times.

How much memory does a web app need? Idle memory for PHP, Python, Java, Spring Boot and .NET, measured
We ran the same hello-world JSON endpoint in eight containers and read docker stats after 50 requests: 6.1 MiB for nginx, 12.8 MiB for PHP, 27 to 32 MiB for .NET, Python and plain Java, and 164 MiB for Spring Boot, which drops to 114 MiB under a 256 MB limit. The numbers, the setup and what they mean for sizing a plan.