armeria
Flagship · Java · engine: Netty · standard configuration · completeness 4/4
Armeria 1.43 on Netty's epoll transport. Services registered on ServerBuilder, compression through EncodingService (brotli4j), static files through FileService with precompressed variants, gRPC through armeria-grpc, WebSocket through WebSocketService, TLS through BoringSSL (netty-tcnative).
- Official repository
- Official website
- Benchmark implementation
- All Java entries, compared
- Open the leaderboard
Achievements
🥇 1 Gold · 🥈 1 Silver · 🥉 1 Bronze. Top three of a field, taken in this entry's own league: the family composite, the same composite among entries written in the same language, and each test profile it is scored on. Every field is the one the badges publish, so a medal and a badge always say the same thing. How medals are awarded.
| Medal | Award | Field | Rank |
|---|---|---|---|
| 🥇 Gold | Test profile | Efficiency · Latency-10K | 1 of 84 |
| 🥈 Silver | Within its language | Java · WebSocket | 2 of 3 |
| 🥉 Bronze | Within its language | Java · HTTP/2 | 3 of 4 |
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, less 2.5% for each of routing, middleware, request and response the entry does not do for you - its completeness factor, which the WebSocket and gRPC families do not carry. 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 | 35 of 84 | 3064 |
| HTTP/2 | 11 of 30 | 962 |
| gRPC | 7 of 9 | 549 |
| WebSocket | 16 of 29 | 1082 |
Every result
Alpha Round, 33 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 | 4,096 | 947,332 | 4.29ms | 16.20ms | 6402.5% | 3.6GiB |
| Connection | Pipelined | 4,096 | 1,894,542 | 34.36ms | 104.60ms | 6225.4% | 4.8GiB |
| Connection | Short-lived | 4,096 | 518,484 | 7.82ms | 82.40ms | 5034.7% | 3.2GiB |
| Concurrency | Async Delay | 32,000 | 1,089,922 | 28.92ms | 84.10ms | 6258.8% | 6.4GiB |
| Efficiency | Latency-10K | 1,024 | 9,983 | 104.2us | 151.0us | 61.0% | 512MiB |
| Efficiency | Latency-1M | 1,024 | 984,199 | 126025.7us | 1022208.0us | 6518.8% | 2.8GiB |
| Efficiency | Latency-500K/8 | 1,024 | 153,244 | 6905079.8us | 13750272.0us | 789.3% | 924MiB |
| Workload | JSON Comp | 4,096 | 232,678 | 17.59ms | 109.70ms | 5944.7% | 4.0GiB |
| Workload | JSON Comp | 16,384 | 230,663 | 69.76ms | 236.70ms | 6139.7% | 4.9GiB |
| Workload | JSON TLS | 4,096 | 483,958 | 10.64ms | 185.91ms | 6355.1% | 4.3GiB |
| Workload | 8Gbit | 512 | 49,364 | 148.4us | 236.0us | 446.8% | 1.1GiB |
| Workload | Static TLS | 1,024 | 57,583 | 19.53ms | 105.07ms | 864.4% | 1.2GiB |
| HTTP/2 | Baseline | 256 | 1,806,527 | 13.05ms | 95.79ms | 6581.6% | 6.4GiB |
| HTTP/2 | Baseline | 1,024 | 1,794,733 | 51.95ms | 291.23ms | 6545.9% | 6.4GiB |
| HTTP/2 | Static | 256 | 47,247 | 167.47ms | 694.21ms | 776.7% | 1.3GiB |
| HTTP/2 | Static | 1,024 | 43,775 | 650.60ms | 2.91s | 745.7% | 3.3GiB |
| HTTP/2 | Baseline (h2c) | 256 | 2,819,662 | 8.93ms | 148.09ms | 6308.9% | 7.3GiB |
| HTTP/2 | Baseline (h2c) | 1,024 | 2,662,569 | 36.68ms | 179.29ms | 6364.4% | 7.5GiB |
| HTTP/2 | Baseline (h2c) | 4,096 | 2,638,313 | 142.60ms | 550.67ms | 6183.4% | 8.5GiB |
| HTTP/2 | JSON (h2c) | 1,024 | 1,124,602 | 28.45ms | 170.67ms | 6201.0% | 6.6GiB |
| HTTP/2 | JSON (h2c) | 4,096 | 1,087,293 | 113.85ms | 508.80ms | 6153.8% | 7.7GiB |
| gRPC | Unary | 256 | 1,797,117 | 13.97ms | 108.37ms | 6714.6% | 9.1GiB |
| gRPC | Unary | 1,024 | 1,763,280 | 54.91ms | 210.68ms | 6649.0% | 12.9GiB |
| gRPC | Unary TLS | 256 | 1,644,850 | 14.93ms | 131.61ms | 6532.6% | 7.9GiB |
| gRPC | Unary TLS | 1,024 | 1,597,100 | 57.97ms | 219.57ms | 6500.1% | 12.8GiB |
| WebSocket | Echo | 512 | 3,041,041 | 167us | 3.18ms | 6528.3% | 991MiB |
| WebSocket | Echo | 4,096 | 3,174,071 | 1.29ms | 7.21ms | 6410.0% | 2.3GiB |
| WebSocket | Echo | 16,384 | 2,641,107 | 6.01ms | 16.40ms | 6159.6% | 2.3GiB |
| WebSocket | Echo Pipelined | 512 | 4,634,394 | 1.76ms | 9.80ms | 6493.1% | 955MiB |
| WebSocket | Echo Pipelined | 4,096 | 4,773,555 | 13.51ms | 33.90ms | 6351.6% | 2.2GiB |
| WebSocket | Echo Pipelined | 16,384 | 4,586,264 | 52.71ms | 114.90ms | 6535.7% | 2.3GiB |
| WebSocket | Echo Short-lived | 512 | 599,751 | 52us | 123us | 3083.5% | 2.2GiB |
| WebSocket | Echo Short-lived | 4,096 | 624,994 | 52us | 126us | 3000.5% | 2.7GiB |
Compared with
The Java entries around armeria on the HTTP/1.1 composite, and the one leading them. The last column shows every profile side by side.
| Entry | Composite | vs armeria | |
|---|---|---|---|
| aegon-java | 5621 | +83% | head to head |
| helidon-production | 3972 | +30% | head to head |
| quarkus-jvm | 3502 | +14% | head to head |
| jooby | 2262 | -26% | head to head |
| spring-boot | 1680 | -45% | head to head |
Compare armeria with any Java entry · Compare armeria with any entry, in any language · Every Java entry, ranked
Results updated · How the benchmark is run · The machine · Add or fix an entry