AWS / RESOURCE STUDY
CPU and RAM under load.
A separate resource study on the four live t4g.nano hosts, using the current binaries and existing caches. 3 interleaved rounds per workload, 1-second warmups, 5-second measurements, 64 HTTP/1.1 keep-alive connections and four wrk threads on a separate c7g.xlarge in the same AZ. All 60 samples are included, with 0 reported request errors. Network burst capacity was not reset or guaranteed. These CPU/RAM figures belong to this pass, not to the earlier throughput chart. Read CPU and RAM together with achieved request rate and bandwidth: network throttling can lower CPU use. Expand each workload to see every round.
UTC: 2026-10-17T21:59:16.013214+00:00 to 2026-10-17T22:05:33.228476+00:00
All resource snapshots and load samples ↗ · Resources during the original throughput run ↗
Tiny text · HTTP
| Server | Median req/s | Host CPU | Service CPU | Server RAM used · peak PSS | Host RAM used · peak | Transmit | Constraint | Errors |
|---|---|---|---|---|---|---|---|---|
| Superweb | 37,800 | 33.9% | 24.6% | 19.0 MiB | 200.7 MiB | 0.163 Gbit/s | Network; Not established | 0 |
| nginx | 97,675 | 100.0% | 99.6% | 9.5 MiB | 192.9 MiB | 0.306 Gbit/s | CPU; Network | 0 |
| Caddy | 18,100 | 98.7% | 98.3% | 31.9 MiB | 202.7 MiB | 0.053 Gbit/s | CPU | 0 |
| lighttpd | 18,880 | 29.5% | 13.6% | 9.8 MiB | 187.8 MiB | 0.032 Gbit/s | Network; Not established | 0 |
All three rounds — Tiny text · HTTP
| Round | Server | Req/s | Host CPU | Service CPU | Server RAM used · peak PSS | Host RAM used · peak | Transmit | Constraint | Errors |
|---|---|---|---|---|---|---|---|---|---|
| 1 | Superweb | 177,772 | 84.9% | 77.8% | 13.6 MiB | 200.7 MiB | 0.720 Gbit/s | Not established | 0 |
| 1 | nginx | 97,675 | 100.0% | 99.6% | 7.9 MiB | 192.9 MiB | 0.306 Gbit/s | CPU | 0 |
| 1 | Caddy | 19,715 | 98.5% | 97.9% | 29.6 MiB | 202.7 MiB | 0.057 Gbit/s | CPU | 0 |
| 1 | lighttpd | 106,176 | 93.1% | 92.2% | 7.5 MiB | 186.5 MiB | 0.299 Gbit/s | Not established | 0 |
| 2 | nginx | 99,812 | 100.0% | 99.6% | 8.1 MiB | 187.2 MiB | 0.313 Gbit/s | CPU | 0 |
| 2 | Caddy | 18,096 | 98.7% | 98.3% | 31.7 MiB | 192.0 MiB | 0.053 Gbit/s | CPU | 0 |
| 2 | lighttpd | 14,809 | 23.4% | 12.2% | 9.8 MiB | 187.8 MiB | 0.032 Gbit/s | Network | 0 |
| 2 | Superweb | 26,979 | 18.4% | 6.5% | 19.0 MiB | 191.2 MiB | 0.032 Gbit/s | Network | 0 |
| 3 | nginx | 17,363 | 29.6% | 15.0% | 9.5 MiB | 189.0 MiB | 0.032 Gbit/s | Network | 0 |
| 3 | Caddy | 18,100 | 99.1% | 98.7% | 31.9 MiB | 190.6 MiB | 0.053 Gbit/s | CPU | 0 |
| 3 | lighttpd | 18,880 | 29.5% | 13.6% | 7.6 MiB | 186.3 MiB | 0.032 Gbit/s | Network | 0 |
| 3 | Superweb | 37,800 | 33.9% | 24.6% | 19.0 MiB | 191.4 MiB | 0.163 Gbit/s | Network | 0 |
Home page, gzip · HTTP
| Server | Median req/s | Host CPU | Service CPU | Server RAM used · peak PSS | Host RAM used · peak | Transmit | Constraint | Errors |
|---|---|---|---|---|---|---|---|---|
| Superweb | 125,423 | 87.0% | 77.7% | 19.0 MiB | 192.3 MiB | 4.892 Gbit/s | Network | 0 |
| nginx | 92,831 | 100.0% | 99.6% | 9.5 MiB | 189.2 MiB | 3.530 Gbit/s | CPU; Network | 0 |
| Caddy | 13,822 | 98.7% | 98.3% | 31.9 MiB | 196.5 MiB | 0.533 Gbit/s | CPU | 0 |
| lighttpd | 89,121 | 100.0% | 99.4% | 10.0 MiB | 202.2 MiB | 3.376 Gbit/s | CPU; Network | 0 |
All three rounds — Home page, gzip · HTTP
| Round | Server | Req/s | Host CPU | Service CPU | Server RAM used · peak PSS | Host RAM used · peak | Transmit | Constraint | Errors |
|---|---|---|---|---|---|---|---|---|---|
| 1 | nginx | 92,831 | 100.0% | 99.6% | 7.9 MiB | 189.2 MiB | 3.530 Gbit/s | CPU | 0 |
| 1 | Caddy | 14,256 | 98.7% | 98.3% | 29.8 MiB | 193.3 MiB | 0.554 Gbit/s | CPU | 0 |
| 1 | lighttpd | 89,792 | 100.0% | 99.5% | 7.6 MiB | 196.2 MiB | 3.397 Gbit/s | CPU | 0 |
| 1 | Superweb | 128,255 | 89.1% | 80.0% | 13.9 MiB | 191.0 MiB | 5.003 Gbit/s | Network | 0 |
| 2 | nginx | 94,144 | 100.0% | 99.6% | 8.1 MiB | 186.8 MiB | 3.584 Gbit/s | CPU | 0 |
| 2 | Caddy | 13,822 | 98.6% | 98.2% | 31.8 MiB | 196.5 MiB | 0.533 Gbit/s | CPU | 0 |
| 2 | lighttpd | 89,121 | 100.0% | 99.4% | 10.0 MiB | 202.2 MiB | 3.376 Gbit/s | CPU | 0 |
| 2 | Superweb | 125,423 | 87.0% | 77.7% | 18.7 MiB | 192.3 MiB | 4.892 Gbit/s | Network | 0 |
| 3 | Caddy | 13,707 | 98.9% | 98.4% | 31.9 MiB | 192.3 MiB | 0.532 Gbit/s | CPU | 0 |
| 3 | lighttpd | 839 | 2.1% | 1.7% | 7.6 MiB | 186.3 MiB | 0.032 Gbit/s | Network | 0 |
| 3 | Superweb | 812 | 1.8% | 1.0% | 19.0 MiB | 191.5 MiB | 0.032 Gbit/s | Network | 0 |
| 3 | nginx | 831 | 3.0% | 2.0% | 9.5 MiB | 188.4 MiB | 0.032 Gbit/s | Network | 0 |
JavaScript, identity · HTTP
| Server | Median req/s | Host CPU | Service CPU | Server RAM used · peak PSS | Host RAM used · peak | Transmit | Constraint | Errors |
|---|---|---|---|---|---|---|---|---|
| Superweb | 12 | 0.6% | 0.1% | 19.0 MiB | 203.7 MiB | 0.032 Gbit/s | Network | 0 |
| nginx | 3,392 | 30.8% | 10.1% | 8.1 MiB | 187.4 MiB | 5.005 Gbit/s | Network | 0 |
| Caddy | 3,391 | 58.0% | 41.7% | 31.1 MiB | 190.3 MiB | 5.006 Gbit/s | Network | 0 |
| lighttpd | 3,390 | 28.1% | 8.8% | 9.8 MiB | 189.7 MiB | 5.004 Gbit/s | Network | 0 |
All three rounds — JavaScript, identity · HTTP
| Round | Server | Req/s | Host CPU | Service CPU | Server RAM used · peak PSS | Host RAM used · peak | Transmit | Constraint | Errors |
|---|---|---|---|---|---|---|---|---|---|
| 1 | Caddy | 3,392 | 55.2% | 40.7% | 29.5 MiB | 189.3 MiB | 5.004 Gbit/s | Network | 0 |
| 1 | lighttpd | 3,390 | 28.1% | 8.8% | 7.6 MiB | 189.3 MiB | 5.005 Gbit/s | Network | 0 |
| 1 | Superweb | 3,393 | 31.8% | 11.6% | 14.3 MiB | 196.1 MiB | 5.004 Gbit/s | Network | 0 |
| 1 | nginx | 3,393 | 30.4% | 10.1% | 7.7 MiB | 187.4 MiB | 5.004 Gbit/s | Network | 0 |
| 2 | Caddy | 3,390 | 59.8% | 41.7% | 30.9 MiB | 189.8 MiB | 5.006 Gbit/s | Network | 0 |
| 2 | lighttpd | 3,391 | 31.8% | 9.3% | 7.5 MiB | 188.0 MiB | 5.004 Gbit/s | Network | 0 |
| 2 | Superweb | 12 | 0.6% | 0.1% | 18.7 MiB | 203.7 MiB | 0.032 Gbit/s | Network | 0 |
| 2 | nginx | 3,392 | 31.0% | 10.3% | 8.1 MiB | 186.4 MiB | 5.005 Gbit/s | Network | 0 |
| 3 | Caddy | 3,391 | 58.0% | 41.9% | 31.1 MiB | 190.3 MiB | 5.006 Gbit/s | Network | 0 |
| 3 | lighttpd | 15 | 0.4% | 0.1% | 9.8 MiB | 189.7 MiB | 0.032 Gbit/s | Network | 0 |
| 3 | Superweb | 12 | 0.5% | 0.1% | 19.0 MiB | 202.3 MiB | 0.032 Gbit/s | Network | 0 |
| 3 | nginx | 3,392 | 30.8% | 10.0% | 8.1 MiB | 186.7 MiB | 5.005 Gbit/s | Network | 0 |
JavaScript, gzip · HTTP
| Server | Median req/s | Host CPU | Service CPU | Server RAM used · peak PSS | Host RAM used · peak | Transmit | Constraint | Errors |
|---|---|---|---|---|---|---|---|---|
| Superweb | 59 | 0.8% | 0.2% | 19.0 MiB | 193.9 MiB | 0.032 Gbit/s | Network | 0 |
| nginx | 10,837 | 30.0% | 18.6% | 8.1 MiB | 186.8 MiB | 5.003 Gbit/s | Network | 0 |
| Caddy | 9,421 | 99.1% | 98.6% | 31.8 MiB | 200.0 MiB | 4.360 Gbit/s | CPU | 0 |
| lighttpd | 10,875 | 30.5% | 19.3% | 7.6 MiB | 187.8 MiB | 5.004 Gbit/s | Network | 0 |
All three rounds — JavaScript, gzip · HTTP
| Round | Server | Req/s | Host CPU | Service CPU | Server RAM used · peak PSS | Host RAM used · peak | Transmit | Constraint | Errors |
|---|---|---|---|---|---|---|---|---|---|
| 1 | lighttpd | 10,876 | 30.5% | 19.3% | 7.6 MiB | 187.8 MiB | 5.004 Gbit/s | Network | 0 |
| 1 | Superweb | 10,821 | 40.9% | 16.0% | 14.5 MiB | 192.6 MiB | 5.004 Gbit/s | Network | 0 |
| 1 | nginx | 10,838 | 30.0% | 18.6% | 7.7 MiB | 185.4 MiB | 5.003 Gbit/s | Network | 0 |
| 1 | Caddy | 9,156 | 99.1% | 98.7% | 29.5 MiB | 188.8 MiB | 4.257 Gbit/s | CPU | 0 |
| 2 | lighttpd | 10,875 | 33.3% | 19.3% | 7.5 MiB | 185.7 MiB | 5.006 Gbit/s | Network | 0 |
| 2 | Superweb | 59 | 0.5% | 0.2% | 18.7 MiB | 193.8 MiB | 0.032 Gbit/s | Network | 0 |
| 2 | nginx | 10,837 | 30.6% | 18.7% | 8.1 MiB | 186.7 MiB | 5.004 Gbit/s | Network | 0 |
| 2 | Caddy | 9,440 | 99.3% | 96.0% | 31.5 MiB | 200.0 MiB | 4.363 Gbit/s | CPU | 0 |
| 3 | lighttpd | 61 | 0.8% | 0.3% | 7.6 MiB | 187.0 MiB | 0.032 Gbit/s | Network | 0 |
| 3 | Superweb | 58 | 0.8% | 0.2% | 19.0 MiB | 193.9 MiB | 0.032 Gbit/s | Network | 0 |
| 3 | nginx | 61 | 0.8% | 0.4% | 8.1 MiB | 186.8 MiB | 0.032 Gbit/s | Network | 0 |
| 3 | Caddy | 9,421 | 99.1% | 98.6% | 31.8 MiB | 198.4 MiB | 4.360 Gbit/s | CPU | 0 |
JavaScript, gzip · HTTPS
| Server | Median req/s | Host CPU | Service CPU | Server RAM used · peak PSS | Host RAM used · peak | Transmit | Constraint | Errors |
|---|---|---|---|---|---|---|---|---|
| Superweb | 61 | 1.4% | 0.8% | 19.0 MiB | 199.1 MiB | 0.032 Gbit/s | Network | 0 |
| nginx | 10,781 | 88.7% | 85.5% | 9.5 MiB | 192.8 MiB | 5.002 Gbit/s | Network | 0 |
| Caddy | 7,329 | 99.3% | 98.8% | 32.9 MiB | 199.8 MiB | 3.419 Gbit/s | CPU | 0 |
| lighttpd | 6,157 | 74.2% | 73.8% | 10.0 MiB | 201.5 MiB | 3.504 Gbit/s | CPU + Network; Network | 0 |
All three rounds — JavaScript, gzip · HTTPS
| Round | Server | Req/s | Host CPU | Service CPU | Server RAM used · peak PSS | Host RAM used · peak | Transmit | Constraint | Errors |
|---|---|---|---|---|---|---|---|---|---|
| 1 | Superweb | 10,752 | 69.4% | 62.0% | 18.7 MiB | 199.1 MiB | 5.005 Gbit/s | Network | 0 |
| 1 | nginx | 10,781 | 90.4% | 87.3% | 8.0 MiB | 187.2 MiB | 5.003 Gbit/s | Network | 0 |
| 1 | Caddy | 7,329 | 99.3% | 98.8% | 32.1 MiB | 197.9 MiB | 3.419 Gbit/s | CPU | 0 |
| 1 | lighttpd | 10,700 | 100.0% | 98.3% | 10.0 MiB | 192.7 MiB | 4.944 Gbit/s | CPU + Network | 0 |
| 2 | Superweb | 61 | 0.8% | 0.5% | 19.0 MiB | 195.1 MiB | 0.032 Gbit/s | Network | 0 |
| 2 | nginx | 10,787 | 88.7% | 85.5% | 8.1 MiB | 192.8 MiB | 5.002 Gbit/s | Network | 0 |
| 2 | Caddy | 7,471 | 99.3% | 98.7% | 32.6 MiB | 194.4 MiB | 3.480 Gbit/s | CPU | 0 |
| 2 | lighttpd | 6,157 | 74.2% | 73.8% | 9.8 MiB | 201.5 MiB | 3.504 Gbit/s | Network | 0 |
| 3 | Superweb | 60 | 1.4% | 0.8% | 19.0 MiB | 193.4 MiB | 0.032 Gbit/s | Network | 0 |
| 3 | nginx | 61 | 1.1% | 0.7% | 9.5 MiB | 189.5 MiB | 0.032 Gbit/s | Network | 0 |
| 3 | Caddy | 7,220 | 99.5% | 98.9% | 32.9 MiB | 199.8 MiB | 3.355 Gbit/s | CPU | 0 |
| 3 | lighttpd | 60 | 1.4% | 0.7% | 9.9 MiB | 192.1 MiB | 0.032 Gbit/s | Network | 0 |
How to read the measurements
Resource intervals must fit entirely inside the timed load test; warmup and partial boundary intervals are excluded. CPU and transmit rates are duration-weighted within each run, then reported as the median across rounds. 100% host or service CPU means both vCPUs are occupied. Service CPU covers its cgroup; host CPU also includes kernel/network work and monitoring. Server RAM used is the sampled peak of summed process PSS (resident memory with shared pages apportioned), including every worker; it excludes swapped-out pages and unmapped filesystem cache. Host RAM used is the sampled peak of MemTotal minus MemAvailable, including the OS and other processes, and excluding memory Linux estimates is available for reuse. MemTotal is usable Linux RAM, not advertised instance capacity. RSS, swap PSS, available host RAM and cgroup memory including charged filesystem cache are also retained in the raw data. The sampler can miss subsecond peaks. No server restarts or cache drops were performed; live services carry their existing cache and allocation history.
Constraint labels are inferences: CPU when run-average host CPU is at least 95%; network when transmit reaches 4.75 Gbit/s or bandwidth-allowance counters increase with CPU below 80%; both when both conditions hold. Memory pressure is flagged by new cgroup high/max/OOM events. Otherwise the constraint is not established. Multiple labels mean the inferred constraint differed between rounds. An ENA exceedance counts queued/dropped packets, not HTTP errors. Lack of a memory-pressure event does not prove RAM could never become a limit.
Sampling interval: 1 second. Each snapshot reads /proc/stat, /proc/meminfo, ENA counters, the service cgroup CPU/memory counters, and smaps_rollup for every worker process. The sampler runs outside the service cgroup. This is a short resource study of five repeated files, not a maximum-cache or memory-capacity test. No memory exhaustion is deliberately induced.
Server versions: Superweb 2026.10 preview, nginx 1.24.0, Caddy 2.6.2, lighttpd 1.4.74. Competitor versions are Ubuntu 24.04 packages, not latest upstream.
Superweb executable SHA-256: 8f30ea377d566560dfda9f8533ef65600b2485f50817f0af299302aa023f319d. SiteVue commit: 2ac4fda96182660d819e91830e33029467c80fd5.
For each run, the raw data retains CPU averages, observed duration, sampled memory peaks, bandwidth allowance counters and errors. PSS includes shared pages proportionally; summing RSS can count shared pages multiple times. Cgroup memory includes charged page cache and kernel memory and must not be substituted for process PSS.
Linux process memory definitions ↗ · Cgroup accounting ↗ · AWS allowance counters ↗
Repeat the resource study
Create the temporary client described in deploy/aws/README.md, then run the commands below. Retrieve the samples before deleting only the temporary client stack.
uv run --with boto3 python deploy/aws/resource_run.py build/aws/benchmark-config.json python3 deploy/aws/resource_report.py build/aws/resource-pass