Skip to content

frameworks/javalin: add benchmark implementation - #1172

Open
nigrosimone wants to merge 3 commits into
MDA2AV:mainfrom
nigrosimone:add-javalin
Open

frameworks/javalin: add benchmark implementation#1172
nigrosimone wants to merge 3 commits into
MDA2AV:mainfrom
nigrosimone:add-javalin

Conversation

@nigrosimone

Copy link
Copy Markdown
Contributor

Adds Javalin, the small JVM framework on Jetty. The JVM entries today are Spring, Quarkus, Helidon and Cardigan, all of them larger stacks.

Six profiles: baseline, pipelined, limited-conn, json, json-comp, upload.

Verified locally: docker build, then the six profiles replayed against this repo's own data/dataset.json, byte identical to express and fastify for the same requests.

Written with Claude Opus 5.

@MDA2AV

MDA2AV commented Aug 15, 2026

Copy link
Copy Markdown
Owner

/benchmark --save

@github-actions

Copy link
Copy Markdown
Contributor

👋 Benchmark request received. A collaborator will review and approve the run.

@github-actions

Copy link
Copy Markdown
Contributor

Benchmark Results

Framework: javalin | Test: all tests

Test Conn RPS CPU Mem Δ RPS Δ Mem
baseline 512 657,068 6192.1% 6.2GiB ~0% ~0%
baseline 4096 657,373 5859.8% 12.6GiB ~0% ~0%
pipelined 512 1,288,483 6584.2% 13.7GiB ~0% ~0%
pipelined 4096 1,300,637 6436.2% 12.8GiB ~0% ~0%
limited-conn 512 532,734 5765.1% 12.1GiB ~0% ~0%
limited-conn 4096 531,539 5736.6% 10.1GiB ~0% ~0%
json 4096 433,366 5646.8% 11.5GiB ~0% ~0%
json-comp 512 234,478 6241.5% 9.2GiB ~0% ~0%
json-comp 4096 232,295 6170.9% 9.7GiB ~0% ~0%
json-comp 16384 229,893 5591.4% 13.6GiB ~0% ~0%
upload 32 2,639 2564.1% 2.3GiB ~0% ~0%
upload 256 2,885 4154.3% 2.4GiB ~0% ~0%
Full log
[info] server ready

[run 1/3]
gcannon v0.5.3
  Target:    localhost:8080/
  Threads:   64
  Conns:     32 (0/thread)
  Pipeline:  1
  Req/conn:  5
  Templates: 4
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   12.59ms   11.10ms   30.80ms   38.90ms   113.70ms

  12765 requests in 5.00s, 12766 responses
  Throughput: 2.55K req/s
  Bandwidth:  269.74KB/s
  Status codes: 2xx=12766, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 12766 / 12766 responses (100.0%)
  Reconnects: 2543
  Per-template: 3147,3202,3232,3185
  Per-template-ok: 3147,3202,3232,3185
[info] CPU 2795.8% | Mem 2.3GiB

[run 2/3]
gcannon v0.5.3
  Target:    localhost:8080/
  Threads:   64
  Conns:     32 (0/thread)
  Pipeline:  1
  Req/conn:  5
  Templates: 4
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   12.09ms   10.00ms   30.80ms   35.90ms   38.40ms

  13199 requests in 5.00s, 13199 responses
  Throughput: 2.64K req/s
  Bandwidth:  278.87KB/s
  Status codes: 2xx=13199, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 13199 / 13199 responses (100.0%)
  Reconnects: 2643
  Per-template: 3295,3283,3298,3323
  Per-template-ok: 3295,3283,3298,3323
[info] CPU 2564.1% | Mem 2.3GiB

[run 3/3]
gcannon v0.5.3
  Target:    localhost:8080/
  Threads:   64
  Conns:     32 (0/thread)
  Pipeline:  1
  Req/conn:  5
  Templates: 4
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   12.11ms   9.70ms   30.60ms   35.80ms   38.30ms

  13174 requests in 5.00s, 13172 responses
  Throughput: 2.63K req/s
  Bandwidth:  278.34KB/s
  Status codes: 2xx=13172, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 13172 / 13172 responses (100.0%)
  Reconnects: 2635
  Per-template: 3290,3284,3276,3322
  Per-template-ok: 3290,3284,3276,3322
[info] CPU 2511.1% | Mem 2.3GiB

=== Best: 2639 req/s (CPU: 2564.1%, Mem: 2.3GiB) ===
[info] input BW: 20.93GB/s (avg template: 8516680 bytes)
[info] saved results/upload/32/javalin.json
httparena-bench-javalin
httparena-bench-javalin

==============================================
=== javalin / upload / 256c (tool=gcannon) ===
==============================================
[info] waiting for server...
[info] server ready

[run 1/3]
gcannon v0.5.3
  Target:    localhost:8080/
  Threads:   64
  Conns:     256 (4/thread)
  Pipeline:  1
  Req/conn:  5
  Templates: 4
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   76.91ms   62.90ms   156.70ms   319.40ms   468.50ms

  14052 requests in 5.03s, 13954 responses
  Throughput: 2.77K req/s
  Bandwidth:  293.37KB/s
  Status codes: 2xx=13954, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 13954 / 13954 responses (100.0%)
  Reconnects: 2731
  Per-template: 3349,3612,3611,3382
  Per-template-ok: 3349,3612,3611,3382
[info] CPU 4620.2% | Mem 2.4GiB

[run 2/3]
gcannon v0.5.3
  Target:    localhost:8080/
  Threads:   64
  Conns:     256 (4/thread)
  Pipeline:  1
  Req/conn:  5
  Templates: 4
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   81.79ms   68.60ms   153.80ms   304.80ms   441.40ms

  14492 requests in 5.03s, 14513 responses
  Throughput: 2.88K req/s
  Bandwidth:  305.06KB/s
  Status codes: 2xx=14513, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 14504 / 14513 responses (99.9%)
  Reconnects: 2848
  Per-template: 3575,3634,3686,3609
  Per-template-ok: 3575,3634,3686,3609
[info] CPU 4154.3% | Mem 2.4GiB

[run 3/3]
gcannon v0.5.3
  Target:    localhost:8080/
  Threads:   64
  Conns:     256 (4/thread)
  Pipeline:  1
  Req/conn:  5
  Templates: 4
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   82.58ms   69.00ms   158.10ms   304.70ms   425.80ms

  14366 requests in 5.03s, 14384 responses
  Throughput: 2.86K req/s
  Bandwidth:  302.56KB/s
  Status codes: 2xx=14384, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 14381 / 14384 responses (100.0%)
  Reconnects: 2842
  Per-template: 3531,3613,3653,3584
  Per-template-ok: 3531,3613,3653,3584
[info] CPU 4086.1% | Mem 2.4GiB

=== Best: 2885 req/s (CPU: 4154.3%, Mem: 2.4GiB) ===
[info] input BW: 22.88GB/s (avg template: 8516680 bytes)
[info] saved results/upload/256/javalin.json
httparena-bench-javalin
httparena-bench-javalin
[info] skip: javalin does not subscribe to api-4
[info] skip: javalin does not subscribe to api-16
[info] skip: javalin does not subscribe to static
[info] skip: javalin does not subscribe to static-tls
[info] skip: javalin does not subscribe to async-db
[info] skip: javalin does not subscribe to crud
[info] skip: javalin does not subscribe to fortunes
[info] skip: javalin does not subscribe to baseline-h2
[info] skip: javalin does not subscribe to static-h2
[info] skip: javalin does not subscribe to baseline-h2c
[info] skip: javalin does not subscribe to json-h2c
[info] skip: javalin does not subscribe to baseline-h3
[info] skip: javalin does not subscribe to static-h3
[info] skip: javalin does not subscribe to gateway-64
[info] skip: javalin does not subscribe to gateway-h3
[info] skip: javalin does not subscribe to production-stack
[info] skip: javalin does not subscribe to unary-grpc
[info] skip: javalin does not subscribe to unary-grpc-tls
[info] skip: javalin does not subscribe to stream-grpc
[info] skip: javalin does not subscribe to stream-grpc-tls
[info] skip: javalin does not subscribe to echo-ws
[info] skip: javalin does not subscribe to echo-ws-pipeline
[info] skip: javalin does not subscribe to echo-ws-limited
[info] rebuilding site/data/*.json
[purged stale] zix-grpc.json (zix-grpc)
[purged stale] zix-ws.json (zix-ws)
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/frameworks.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/results/javalin.json - 12 new, 12 total
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/current.json
[info] done
[info] restoring loopback MTU to 65536

Comment thread site/static/logs/upload/32/javalin.log
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants