ktor-ghost
Flagship · Kotlin · engine: netty · tuned configuration
JetBrains Ktor 3.x on Netty with Kotlin coroutines, Ghost Serializer, 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 | 26 of 97 | 491 |
| HTTP/2 | 16 of 29 | 60 |
| WebSocket | 23 of 32 | 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 | 830,262 | 616us | 1.34ms | 6404.1% | 10.7GiB |
| Connection | Baseline | 4,096 | 838,039 | 4.90ms | 9.60ms | 6201.7% | 4.9GiB |
| Connection | Pipelined | 512 | 590,006 | 13.89ms | 51.20ms | 4645.7% | 9.1GiB |
| Connection | Pipelined | 4,096 | 654,297 | 99.47ms | 146.90ms | 4849.5% | 9.5GiB |
| Connection | Short-lived | 512 | 646,754 | 783us | 4.89ms | 6255.2% | 4.7GiB |
| Connection | Short-lived | 4,096 | 655,894 | 6.20ms | 54.10ms | 6025.3% | 4.9GiB |
| Workload | JSON | 4,096 | 657,766 | 5.91ms | 29.70ms | 6362.7% | 4.8GiB |
| Workload | JSON Comp | 512 | 203,733 | 2.49ms | 9.63ms | 6273.9% | 4.0GiB |
| Workload | JSON Comp | 4,096 | 217,405 | 18.85ms | 42.30ms | 6244.1% | 4.5GiB |
| Workload | JSON Comp | 16,384 | 218,199 | 74.08ms | 145.20ms | 6022.6% | 11.4GiB |
| Workload | JSON TLS | 4,096 | 607,943 | 8.03ms | 266.87ms | 6059.8% | 6.0GiB |
| Workload | Upload | 32 | 1,637 | 19.48ms | 95.00ms | 3133.0% | 1.4GiB |
| Workload | Upload | 256 | 1,861 | 133.49ms | 580.30ms | 4606.5% | 1.5GiB |
| Workload | Static | 1,024 | 271,389 | 4.95ms | 144.40ms | 6159.7% | 3.6GiB |
| Workload | Static | 4,096 | 277,642 | 14.98ms | 126.75ms | 6080.7% | 4.6GiB |
| Workload | Static | 6,800 | 275,803 | 25.03ms | 195.41ms | 6078.2% | 5.1GiB |
| Workload | Static TLS | 1,024 | 191,799 | 8.84ms | 183.27ms | 6430.3% | 3.3GiB |
| Workload | Static TLS | 4,096 | 238,995 | 18.50ms | 303.36ms | 6151.4% | 5.3GiB |
| Workload | Static TLS | 6,800 | 229,300 | 31.07ms | 382.26ms | 5873.5% | 5.8GiB |
| Database | Async DB | 1,024 | 113,590 | 8.61ms | 11.20ms | 5318.7% | 12.2GiB |
| Database | CRUD | 4,096 | 187,905 | 21.80ms | 38.50ms | 5354.4% | 5.7GiB |
| Database | Fortunes | 1,024 | 49,991 | 19.90ms | 43.10ms | 5612.1% | 11.9GiB |
| Multi-endpoint | API-4 | 256 | 25,271 | 9.43ms | 27.60ms | 411.2% | 613MiB |
| Multi-endpoint | API-16 | 1,024 | 87,734 | 10.38ms | 52.40ms | 1764.4% | 1.3GiB |
| HTTP/2 | Baseline | 256 | 515,664 | 46.06ms | 282.20ms | 5757.4% | 31.1GiB |
| HTTP/2 | Baseline | 1,024 | 495,732 | 193.95ms | 768.20ms | 5862.3% | 30.1GiB |
| HTTP/2 | Static | 256 | 196,780 | 40.90ms | 299.14ms | 5881.4% | 23.3GiB |
| HTTP/2 | Static | 1,024 | 184,792 | 170.18ms | 530.61ms | 5720.6% | 24.2GiB |
| HTTP/2 | Baseline (h2c) | 256 | 391,103 | 54.35ms | 359.42ms | 5639.1% | 30.4GiB |
| HTTP/2 | Baseline (h2c) | 1,024 | 362,388 | 291.47ms | 1.95s | 5652.8% | 30.9GiB |
| HTTP/2 | Baseline (h2c) | 4,096 | 392,445 | 868.48ms | 2.26s | 5584.7% | 31.4GiB |
| HTTP/2 | JSON (h2c) | 1,024 | 424,461 | 71.66ms | 319.32ms | 5873.4% | 29.4GiB |
| HTTP/2 | JSON (h2c) | 4,096 | 389,919 | 304.94ms | 1.05s | 5765.4% | 29.5GiB |
| WebSocket | Echo | 512 | 1,021,563 | 500us | 1.33ms | 3426.9% | 2.5GiB |
| WebSocket | Echo | 4,096 | 973,072 | 4.16ms | 9.46ms | 3435.1% | 3.4GiB |
| WebSocket | Echo | 16,384 | 676,216 | 23.65ms | 42.90ms | 3283.8% | 15.7GiB |
| WebSocket | Echo Pipelined | 512 | 11,253,401 | 727us | 1.93ms | 3375.7% | 9.8GiB |
| WebSocket | Echo Pipelined | 4,096 | 11,090,871 | 5.89ms | 14.40ms | 3425.7% | 13.7GiB |
| WebSocket | Echo Pipelined | 16,384 | 8,286,836 | 30.72ms | 69.70ms | 3335.9% | 20.9GiB |
How the benchmark is run · The machine · Add or fix an entry