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
@MDA2AV

MDA2AV commented Aug 18, 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 673,103 6170.2% 10.8GiB +2.4% +74.2%
baseline 4096 668,112 5826.0% 12.0GiB +1.6% -4.8%
pipelined 512 1,291,438 6527.3% 10.4GiB +0.2% -24.1%
pipelined 4096 1,298,694 6363.0% 11.6GiB -0.1% -9.4%
limited-conn 512 541,714 5710.8% 12.1GiB +1.7% ~0%
limited-conn 4096 532,511 5626.6% 11.0GiB +0.2% +8.9%
json 4096 436,316 5794.6% 10.4GiB +0.7% -9.6%
json-comp 512 230,300 6195.7% 5.4GiB -1.8% -41.3%
json-comp 4096 232,792 6172.5% 11.2GiB +0.2% +15.5%
json-comp 16384 233,342 5685.8% 15.6GiB +1.5% +14.7%
upload 32 2,566 2513.2% 2.3GiB -2.8% ~0%
upload 256 2,860 4034.5% 2.4GiB -0.9% ~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   13.01ms   11.90ms   32.00ms   37.60ms   119.90ms

  12355 requests in 5.00s, 12355 responses
  Throughput: 2.47K req/s
  Bandwidth:  261.13KB/s
  Status codes: 2xx=12355, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 12355 / 12355 responses (100.0%)
  Reconnects: 2464
  Per-template: 3040,3094,3141,3080
  Per-template-ok: 3040,3094,3141,3080
[info] CPU 2716.4% | Mem 2.4GiB

[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.44ms   9.58ms   31.50ms   35.40ms   37.50ms

  12831 requests in 5.00s, 12832 responses
  Throughput: 2.56K req/s
  Bandwidth:  271.19KB/s
  Status codes: 2xx=12832, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 12832 / 12832 responses (100.0%)
  Reconnects: 2570
  Per-template: 3210,3204,3192,3226
  Per-template-ok: 3210,3204,3192,3226
[info] CPU 2513.2% | 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.46ms   5.38ms   31.60ms   35.40ms   37.30ms

  12816 requests in 5.00s, 12816 responses
  Throughput: 2.56K req/s
  Bandwidth:  270.85KB/s
  Status codes: 2xx=12816, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 12816 / 12816 responses (100.0%)
  Reconnects: 2569
  Per-template: 3210,3203,3186,3217
  Per-template-ok: 3210,3203,3186,3217
[info] CPU 2502.8% | Mem 2.3GiB

=== Best: 2566 req/s (CPU: 2513.2%, Mem: 2.3GiB) ===
[info] input BW: 20.35GB/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   75.11ms   61.30ms   155.10ms   326.40ms   495.00ms

  14437 requests in 5.04s, 14332 responses
  Throughput: 2.85K req/s
  Bandwidth:  300.86KB/s
  Status codes: 2xx=14332, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 14332 / 14332 responses (100.0%)
  Reconnects: 2815
  Per-template: 3435,3711,3737,3449
  Per-template-ok: 3435,3711,3737,3449
[info] CPU 4713.3% | 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   84.09ms   66.00ms   174.80ms   355.20ms   528.40ms

  14207 requests in 5.03s, 14226 responses
  Throughput: 2.83K req/s
  Bandwidth:  299.14KB/s
  Status codes: 2xx=14226, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 14226 / 14226 responses (100.0%)
  Reconnects: 2802
  Per-template: 3426,3515,3564,3721
  Per-template-ok: 3426,3515,3564,3721
[info] CPU 4252.5% | 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.45ms   70.20ms   155.30ms   307.90ms   417.70ms

  14366 requests in 5.03s, 14388 responses
  Throughput: 2.86K req/s
  Bandwidth:  302.49KB/s
  Status codes: 2xx=14388, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 14388 / 14388 responses (100.0%)
  Reconnects: 2828
  Per-template: 3525,3633,3666,3564
  Per-template-ok: 3525,3633,3666,3564
[info] CPU 4034.5% | Mem 2.4GiB

=== Best: 2860 req/s (CPU: 4034.5%, Mem: 2.4GiB) ===
[info] input BW: 22.68GB/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

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