Implementation Guidelines

$ Production
# Tuned
* Engine
All endpoint implementations must follow their respective production rules. No endpoint-specific optimizations that would not be used in production.
May optimize each endpoint independently. Pre-computed responses, custom serializers, and non-default configurations allowed.
No specific rules.

The API-4 profile runs a lighter workload than Mixed with the server container constrained to 4 CPUs and 16 GB memory. Only baseline, JSON, static files, and async database endpoints are tested — heavy endpoints (upload, compression, SQLite DB) are excluded. The load generator uses 4 threads and 256 connections.

Connections: 128

How it differs from Mixed

ParameterMixedAPI-4
Server CPUsUnlimited4
Server memoryUnlimited16 GB
Connections4,096128
gcannon threads644
Duration15s15s
Request templates148
Requests per connection55
UploadYesNo
CompressionYesNo
SQLite DBYesNo

What it measures

  • Resource-constrained performance - how well a framework utilizes limited CPU and memory
  • Real-world relevance - closer to a typical production deployment (4-core VM, limited RAM) than the full-hardware tests
  • Efficiency under contention - thread pool saturation, memory pressure, and GC behavior when resources are scarce
  • Scaling characteristics - whether a framework’s performance degrades gracefully with fewer resources

Request mix

  • 3x baseline GET (GET /baseline11?a=1&b=2)
  • 3x JSON processing (GET /json)
  • 2x async DB query (GET /async-db?min=10&max=50)

Docker constraints

The server container is started with:

--cpus=4 --memory=16g --memory-swap=16g

If a framework exceeds the 16 GB memory limit, the container will be OOM-killed by Docker.

Parameters

ParameterValue
Endpoints/baseline11, /json, /async-db
Connections256
Pipeline1
Requests per connection5 (then reconnect with next template)
Duration15s
Runs3 (best taken)
Templates8 (3 baseline GET, 3 JSON, 2 async-db)
Server CPU limit4
Server memory limit16 GB
gcannon threads4