ktor
Flagship · Kotlin · engine: netty · standard configuration
JetBrains Ktor 3.x on Netty with Kotlin coroutines, kotlinx.serialization, JDK 21.
Composite rank
Each profile of a family is worth 100 to the entry that leads it, and the composite is the sum over the family. The field is this entry's own league: engines and reverse proxies are scored apart from frameworks. How it works.
| Family | Rank | Composite |
|---|---|---|
| HTTP/1.1 | 17 of 71 | 434 |
| HTTP/2 | 9 of 16 | 54 |
| WebSocket | 14 of 20 | 38 |
Every result
Alpha Round, 39 runs. Requests per second is the best of three; latency, CPU and memory come from that run.
| Category | Profile | Conns | Req/sec | Avg | p99 | CPU | Memory |
|---|---|---|---|---|---|---|---|
| Connection | Baseline | 512 | 817,316 | 625us | 1.39ms | 6273.8% | 5.0GiB |
| Connection | Baseline | 4,096 | 822,062 | 4.97ms | 9.82ms | 6154.9% | 9.5GiB |
| Connection | Pipelined | 512 | 619,926 | 13.23ms | 59.70ms | 4584.1% | 10.6GiB |
| Connection | Pipelined | 4,096 | 584,867 | 110.57ms | 138.90ms | 4725.5% | 17.9GiB |
| Connection | Short-lived | 512 | 656,997 | 771us | 4.71ms | 6284.7% | 4.7GiB |
| Connection | Short-lived | 4,096 | 665,691 | 6.12ms | 49.70ms | 6284.1% | 4.4GiB |
| Workload | JSON | 4,096 | 395,250 | 10.11ms | 34.60ms | 4723.0% | 9.9GiB |
| Workload | JSON Comp | 512 | 182,888 | 2.78ms | 16.50ms | 6268.6% | 4.9GiB |
| Workload | JSON Comp | 4,096 | 193,020 | 21.17ms | 82.30ms | 6158.4% | 5.2GiB |
| Workload | JSON Comp | 16,384 | 189,511 | 84.68ms | 260.80ms | 6028.2% | 11.2GiB |
| Workload | JSON TLS | 4,096 | 391,978 | 11.92ms | 11.92ms | 4946.9% | 9.3GiB |
| Workload | Upload | 32 | 1,529 | 20.84ms | 110.60ms | 3240.4% | 1.4GiB |
| Workload | Upload | 256 | 1,833 | 134.47ms | 714.00ms | 4740.0% | 1.5GiB |
| Workload | Static | 1,024 | 284,595 | 4.06ms | 4.06ms | 6115.3% | 4.3GiB |
| Workload | Static | 4,096 | 282,154 | 14.74ms | 14.74ms | 5987.3% | 4.4GiB |
| Workload | Static | 6,800 | 273,800 | 24.78ms | 24.78ms | 6022.8% | 5.1GiB |
| Workload | Static TLS | 1,024 | 204,709 | 8.18ms | 245.95ms | 6407.0% | 3.8GiB |
| Workload | Static TLS | 4,096 | 238,340 | 18.57ms | 341.06ms | 6060.9% | 5.0GiB |
| Workload | Static TLS | 6,800 | 226,856 | 31.52ms | 367.08ms | 5788.5% | 6.0GiB |
| Database | Async DB | 1,024 | 103,951 | 9.45ms | 13.60ms | 4993.8% | 9.6GiB |
| Database | CRUD | 4,096 | 172,551 | 23.71ms | 41.50ms | 5013.2% | 5.6GiB |
| Database | Fortunes | 1,024 | 51,030 | 19.15ms | 41.20ms | 5349.4% | 7.5GiB |
| Multi-endpoint | API-4 | 256 | 28,322 | 8.09ms | 30.50ms | 415.1% | 771MiB |
| Multi-endpoint | API-16 | 1,024 | 71,525 | 12.96ms | 47.10ms | 1771.6% | 2.0GiB |
| HTTP/2 | Baseline | 256 | 558,485 | 44.86ms | 44.86ms | 5918.6% | 29.8GiB |
| HTTP/2 | Baseline | 1,024 | 541,980 | 184.02ms | 184.02ms | 5904.2% | 30.0GiB |
| HTTP/2 | Static | 256 | 189,737 | 41.76ms | 41.76ms | 6023.8% | 16.0GiB |
| HTTP/2 | Static | 1,024 | 180,206 | 173.56ms | 173.56ms | 5728.0% | 24.7GiB |
| HTTP/2 | Baseline (h2c) | 256 | 412,245 | 67.92ms | 67.92ms | 5465.5% | 30.7GiB |
| HTTP/2 | Baseline (h2c) | 1,024 | 402,964 | 210.39ms | 210.39ms | 5790.3% | 31.1GiB |
| HTTP/2 | Baseline (h2c) | 4,096 | 279,991 | 1.37s | 1.37s | 5175.2% | 31.2GiB |
| HTTP/2 | JSON (h2c) | 1,024 | 314,284 | 101.21ms | 101.21ms | 4441.9% | 28.2GiB |
| HTTP/2 | JSON (h2c) | 4,096 | 282,755 | 426.56ms | 426.56ms | 4531.9% | 29.9GiB |
| WebSocket | Echo | 512 | 1,021,279 | 500us | 1.13ms | 3426.5% | 2.5GiB |
| WebSocket | Echo | 4,096 | 980,019 | 4.15ms | 8.98ms | 3411.2% | 6.6GiB |
| WebSocket | Echo | 16,384 | 645,400 | 24.58ms | 42.30ms | 3396.7% | 14.8GiB |
| WebSocket | Echo Pipelined | 512 | 11,215,557 | 729us | 2.13ms | 3370.7% | 10.8GiB |
| WebSocket | Echo Pipelined | 4,096 | 10,647,634 | 6.12ms | 15.10ms | 3385.1% | 13.0GiB |
| WebSocket | Echo Pipelined | 16,384 | 8,879,790 | 28.61ms | 61.10ms | 3418.8% | 20.7GiB |
How the benchmark is run · The machine · Add or fix an entry