Skip to content

frameworks/fulmine: bump to fulmine.js 5.12.2 - #1182

Merged
MDA2AV merged 7 commits into
MDA2AV:mainfrom
nigrosimone:bump-fulmine-5.12
Aug 16, 2026
Merged

frameworks/fulmine: bump to fulmine.js 5.12.2#1182
MDA2AV merged 7 commits into
MDA2AV:mainfrom
nigrosimone:bump-fulmine-5.12

Conversation

@nigrosimone

Copy link
Copy Markdown
Contributor

fulmine.js 5.12.0 is out, this bumps the entry to it.

The change that matters for the profiles is on the body path: a chunked request body is now collected natively in one callback, where before it was one callback and one copy per chunk. The rest of the release is router and settings work on paths the entry already takes, plus fixes.

No changes to the entry itself.

@nigrosimone
nigrosimone marked this pull request as ready for review August 16, 2026 03:48
@nigrosimone

Copy link
Copy Markdown
Contributor Author

The three compose FAILs are not this bump: the gateway and production-stack compose files pin cpuset 0-15,64-79 and 16-31,80-95, which are the benchmark host cores, and the validate runner has 0-3. Nothing sets PROXY_CPUSET or SERVER_CPUSET during validation, so the defaults apply and docker refuses to create the container. It is the same story as REDIS_CPUSET, which validate.sh already leaves unpinned because validation is correctness-only; the compose profiles need the same treatment. Any gateway-subscribed entry has this on a small runner, trillium carries the same defaults.

@nigrosimone

Copy link
Copy Markdown
Contributor Author

/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: fulmine | Test: all tests

Test Conn RPS CPU Mem Δ RPS Δ Mem
baseline 512 1,270,468 6818.6% 2.6GiB -3.5% ~0%
baseline 4096 1,250,340 6600.2% 2.6GiB -3.2% -3.7%
pipelined 512 30,532,380 6760.4% 2.1GiB -1.9% ~0%
pipelined 4096 30,782,614 6529.5% 2.1GiB ~0% ~0%
limited-conn 512 1,070,254 6179.2% 2.6GiB -1.0% -3.7%
limited-conn 4096 1,150,761 6470.9% 2.7GiB -1.3% ~0%
json 4096 1,092,521 6489.8% 6.9GiB -0.8% -14.8%
json-comp 512 328,568 6179.2% 8.2GiB -0.7% -1.2%
json-comp 4096 336,329 6388.0% 9.0GiB -0.3% ~0%
json-comp 16384 350,328 6297.5% 10.2GiB -0.7% -1.9%
json-tls 4096 1,023,771 6583.2% 8.1GiB -0.9% +1.2%
upload 32 2,036 2994.4% 6.5GiB -0.2% -1.5%
upload 256 2,133 6294.5% 7.4GiB -0.6% +2.8%
api-4 256 35,992 393.8% 538MiB +7.4% +0.4%
api-16 1024 126,600 1559.7% 2.2GiB +3.3% +4.8%
static 1024 361,533 6574.7% 6.5GiB +0.1% +1.6%
static 4096 472,203 6563.8% 7.8GiB +0.1% +1.3%
static 6800 515,500 6536.3% 7.5GiB -0.1% -1.3%
static-tls 1024 310,680 6558.9% 6.4GiB -1.4% +1.6%
static-tls 4096 388,689 6507.0% 7.2GiB -1.6% -1.4%
static-tls 6800 415,301 6450.6% 7.4GiB -0.2% ~0%
async-db 1024 233,215 5853.8% 4.3GiB +2.4% ~0%
crud 4096 354,134 4301.8% 8.4GiB -0.9% +3.7%
fortunes 1024 67,929 6503.2% 4.3GiB -0.3% ~0%
gateway-64 512 89,493 4387.4% 4.5GiB +0.2% -4.3%
gateway-64 1024 81,253 4142.9% 7.2GiB +1.6% +9.1%
gateway-h3 64 90,626 3555.5% 2.9GiB +0.2% ~0%
gateway-h3 256 61,681 2580.7% 4.2GiB +0.3% +2.4%
Full log
==============================================
[info] starting gateway compose stack: fulmine (production-stack)
 Image httparena-fulmine-production-stack-authsvc Building 
 Image httparena-fulmine-production-stack-server Building 
 Image httparena-fulmine-production-stack-edge Building 
#1 [internal] load local bake definitions
#1 reading from stdin 1.82kB done
#1 DONE 0.0s

#2 [edge internal] load build definition from Dockerfile
#2 transferring dockerfile: 279B done
#2 DONE 0.1s

#3 [server internal] load build definition from Dockerfile
#3 transferring dockerfile: 782B done
#3 DONE 0.0s

#4 [authsvc internal] load build definition from Dockerfile
#4 transferring dockerfile: 1.23kB done
#4 DONE 0.1s

#5 [authsvc internal] load metadata for docker.io/library/rust:1-alpine
#5 ...

#6 [server internal] load metadata for docker.io/library/node:26-trixie-slim
#6 DONE 0.2s

#7 [edge internal] load metadata for docker.io/library/caddy:2-alpine
#7 DONE 0.2s

#8 [server internal] load .dockerignore
#8 transferring context: 2B done
#8 DONE 0.0s

#9 [edge internal] load .dockerignore
#9 transferring context: 2B done
#9 DONE 0.0s

#10 [server internal] load build context
#10 transferring context: 124B done
#10 DONE 0.1s

#11 [server build 1/6] FROM docker.io/library/node:26-trixie-slim@sha256:4ebb5ace66f15a24c14c492e01a8beeed4fddf970a856109f5126e703e5fe503
#11 resolve docker.io/library/node:26-trixie-slim@sha256:4ebb5ace66f15a24c14c492e01a8beeed4fddf970a856109f5126e703e5fe503 0.1s done
#11 DONE 0.1s

#12 [server build 4/6] WORKDIR /app
#12 CACHED

#13 [server build 3/6] RUN git config --global url."https://github.com/".insteadOf "ssh://git@github.com/"
#13 CACHED

#14 [server build 6/6] RUN npm install --omit=dev
#14 CACHED

#15 [server build 5/6] COPY package.json .
#15 CACHED

#16 [server stage-1 4/6] COPY --from=build /app/node_modules ./node_modules
#16 CACHED

#17 [server build 2/6] RUN apt-get update &&     apt-get install -y --no-install-recommends ca-certificates git python3 make g++ libpq-dev &&     rm -rf /var/lib/apt/lists/*
#17 CACHED

#18 [server stage-1 3/6] WORKDIR /app
#18 CACHED

#19 [server stage-1 2/6] RUN apt-get update &&     apt-get install -y --no-install-recommends ca-certificates curl libpq5 &&     rm -rf /var/lib/apt/lists/*
#19 CACHED

#20 [server stage-1 5/6] COPY app.js .
#20 CACHED

#21 [server stage-1 6/6] COPY views ./views
#21 CACHED

#22 [edge internal] load build context
#22 transferring context: 1.17kB done
#22 DONE 0.0s

#23 [edge 1/2] FROM docker.io/library/caddy:2-alpine@sha256:5f5c8640aae01df9654968d946d8f1a56c497f1dd5c5cda4cf95ab7c14d58648
#23 resolve docker.io/library/caddy:2-alpine@sha256:5f5c8640aae01df9654968d946d8f1a56c497f1dd5c5cda4cf95ab7c14d58648 0.1s done
#23 DONE 0.1s

#24 [edge 2/2] COPY Caddyfile /etc/caddy/Caddyfile
#24 CACHED

#25 [edge] exporting to image
#25 exporting layers done
#25 exporting manifest sha256:6f210f15ed07e96fb74f9d8b48189c29ecff1488044a8da818fba160b96fb2f2 0.0s done
#25 exporting config sha256:badf4c570c6d598fd4178c7b6eeb09bd946a54dfa5b33cd676484b4fb6c58e5d 0.0s done
#25 exporting attestation manifest sha256:6b5a60307498535d1f9103bc6bbd47d7699ce734bc0b7326772ca7d3e3ca5f29
#25 exporting attestation manifest sha256:6b5a60307498535d1f9103bc6bbd47d7699ce734bc0b7326772ca7d3e3ca5f29 0.1s done
#25 exporting manifest list sha256:36bf1eb8a9cb265d2448725c58219785ab164bb5632d9e7210c9aea5a1ce2dbe 0.0s done
#25 naming to docker.io/library/httparena-fulmine-production-stack-edge:latest done
#25 unpacking to docker.io/library/httparena-fulmine-production-stack-edge:latest 0.0s done
#25 DONE 0.2s

#26 [server] exporting to image
#26 exporting layers done
#26 exporting manifest sha256:3d252608c5b9edfcd1b0a36456260708ba0f63dcb59788ed6bb52adfc3816e9b 0.0s done
#26 exporting config sha256:c31f2bbcb86dc47b930759e2ba5a98b77cdaffac5ab307ece400354255b42ea1 0.0s done
#26 exporting attestation manifest sha256:b0d04dc599a8296258c33ff309a5a6891e18ad1016975bb58f5556cd7731e718 0.1s done
#26 exporting manifest list sha256:930c5f0543368878df1c9fb4e407a77ae6d1c49a75e94ff34a774d2f459abd81 0.0s done
#26 naming to docker.io/library/httparena-fulmine-production-stack-server:latest 0.0s done
#26 unpacking to docker.io/library/httparena-fulmine-production-stack-server:latest 0.0s done
#26 DONE 0.3s

#27 [authsvc internal] load metadata for docker.io/library/alpine:3.20
#27 DONE 0.8s

#5 [authsvc internal] load metadata for docker.io/library/rust:1-alpine
#5 DONE 0.8s

#28 [authsvc internal] load .dockerignore
#28 transferring context: 65B done
#28 DONE 0.0s

#29 [authsvc internal] load build context
#29 DONE 0.0s

#30 [authsvc build 1/7] FROM docker.io/library/rust:1-alpine@sha256:3c38f3f82c2f3d73da3b38e18d279393a04cb43ddded0e35088a8c3324d40900
#30 resolve docker.io/library/rust:1-alpine@sha256:3c38f3f82c2f3d73da3b38e18d279393a04cb43ddded0e35088a8c3324d40900 0.1s done
#30 DONE 0.1s

#31 [authsvc stage-1 1/3] FROM docker.io/library/alpine:3.20@sha256:d9e853e87e55526f6b2917df91a2115c36dd7c696a35be12163d44e6e2a4b6bc
#31 resolve docker.io/library/alpine:3.20@sha256:d9e853e87e55526f6b2917df91a2115c36dd7c696a35be12163d44e6e2a4b6bc 0.1s done
#31 DONE 0.1s

#29 [authsvc internal] load build context
#29 transferring context: 6.54kB done
#29 DONE 0.0s

#32 [authsvc build 2/7] WORKDIR /build
#32 CACHED

#33 [authsvc build 3/7] RUN apk add --no-cache musl-dev pkgconfig
#33 CACHED

#34 [authsvc build 6/7] COPY src ./src
#34 CACHED

#35 [authsvc stage-1 2/3] RUN apk add --no-cache ca-certificates
#35 CACHED

#36 [authsvc build 4/7] COPY Cargo.toml .
#36 CACHED

#37 [authsvc build 5/7] RUN mkdir src && echo 'fn main() {}' > src/main.rs &&     cargo build --release &&     rm -rf src target/release/deps/authsvc*
#37 CACHED

#38 [authsvc build 7/7] RUN cargo build --release &&     strip target/release/authsvc
#38 CACHED

#39 [authsvc stage-1 3/3] COPY --from=build /build/target/release/authsvc /usr/local/bin/authsvc
#39 CACHED

#40 [server] resolving provenance for metadata file
#40 DONE 0.0s

#41 [edge] resolving provenance for metadata file
#41 DONE 0.0s

#42 [authsvc] exporting to image
#42 exporting layers done
#42 exporting manifest sha256:cbec56b40de0e4df46dcaf00dfeddc08b6437a1aba23b201263b36eb6244c33f done
#42 exporting config sha256:7d2025dba1ada10e5e24f7fee7bdd851ed313cda33740d84faa8641fdee06f31 0.0s done
#42 exporting attestation manifest sha256:4ec03651c20ee7f3493648887492e6ea444297e437427b60c47697a6c8e0370f 0.1s done
#42 exporting manifest list sha256:e199802dd12ce3e98715361c85a7768b8683838f554c444bef98857e98eaf531
#42 exporting manifest list sha256:e199802dd12ce3e98715361c85a7768b8683838f554c444bef98857e98eaf531 0.0s done
#42 naming to docker.io/library/httparena-fulmine-production-stack-authsvc:latest done
#42 unpacking to docker.io/library/httparena-fulmine-production-stack-authsvc:latest done
#42 DONE 0.2s

#43 [authsvc] resolving provenance for metadata file
#43 DONE 0.0s
 Image httparena-fulmine-production-stack-server Built 
 Image httparena-fulmine-production-stack-edge Built 
 Image httparena-fulmine-production-stack-authsvc Built 
 Container httparena-fulmine-production-stack-cache-1 Creating 
 Container httparena-fulmine-production-stack-authsvc-1 Creating 
 Container httparena-fulmine-production-stack-authsvc-1 Created 
 Container httparena-fulmine-production-stack-cache-1 Created 
 Container httparena-fulmine-production-stack-server-1 Creating 
 Container httparena-fulmine-production-stack-server-1 Created 
 Container httparena-fulmine-production-stack-edge-1 Creating 
 Container httparena-fulmine-production-stack-edge-1 Created 
 Container httparena-fulmine-production-stack-cache-1 Starting 
 Container httparena-fulmine-production-stack-authsvc-1 Starting 
 Container httparena-fulmine-production-stack-authsvc-1 Started 
 Container httparena-fulmine-production-stack-cache-1 Started 
 Container httparena-fulmine-production-stack-server-1 Starting 
 Container httparena-fulmine-production-stack-server-1 Started 
 Container httparena-fulmine-production-stack-authsvc-1 Waiting 
 Container httparena-fulmine-production-stack-authsvc-1 Error dependency authsvc failed to start
dependency failed to start: container httparena-fulmine-production-stack-authsvc-1 exited (101)
[FAIL] gateway compose up failed
httparena-postgres
httparena-redis
[info] restoring loopback MTU to 65536

@nigrosimone

nigrosimone commented Aug 16, 2026

Copy link
Copy Markdown
Contributor Author

echo-ws, echo-ws-pipeline, echo-ws-limited and production-stack, are broken!?

@nigrosimone
nigrosimone marked this pull request as draft August 16, 2026 10:56
@MDA2AV

MDA2AV commented Aug 16, 2026

Copy link
Copy Markdown
Owner

echo-ws, echo-ws-pipeline, echo-ws-limited and production-stack, are broken!?

Hmm looks like something broke prod stack test

Container httparena-fulmine-production-stack-server-1 Started Container httparena-fulmine-production-stack-authsvc-1 Waiting Container httparena-fulmine-production-stack-authsvc-1 Error dependency authsvc failed to start dependency failed to start: container httparena-fulmine-production-stack-authsvc-1 exited (101) [FAIL] gateway compose up failed

MDA2AV added a commit that referenced this pull request Aug 16, 2026
…nd say why a stack failed (#1189)

production-stack failed on #1182 with nothing in the log but an exit code:

    Container httparena-fulmine-production-stack-authsvc-1 Error dependency authsvc failed to start
    dependency failed to start: container ...-authsvc-1 exited (101)
    [FAIL] gateway compose up failed

101 is a Rust panic. Building frameworks/_shared/authsvc and running it twice
reproduces it exactly: on a clean host it logs "authsvc listening on
0.0.0.0:9090" and answers /_health 200; with 9090 already held it exits 101 with
"bind 0.0.0.0:9090: Address in use (os error 98)".

Nothing about that is fulmine's. authsvc is the shared sidecar every
production-stack entry builds, and every gateway and production stack runs
network_mode: host on the same fixed ports - edge 8443, authsvc 9090, server
8080 - so no two can coexist. gateway_up already runs `down --remove-orphans`,
but scoped to this framework's own compose project, so a stack left behind by
another entry, or by a run killed between profiles, survives it. The only
broader sweep is the one benchmark.sh does once at startup.

_gateway_clear_stale() now removes running containers belonging to any other
httparena-* compose project just before `up`, naming what it removed. It
matches on the compose project label, so the harness's own `docker run`
sidecars - httparena-postgres, httparena-redis - carry no such label and are
untouched. The listing is split on `|` rather than whitespace: an unlabelled
container prints an empty field, and with whitespace splitting its name would
shift into the label's position and match the httparena- test by accident.

The second half is why this took a rebuild to diagnose at all. compose reports
the exit code and nothing else, so the reason never reached the run log.
_gateway_dump_logs() prints each container of the failed stack through the
existing dump_container_logs(), so the next failure names itself:

    ─── httparena-...-authsvc-1 — status=exited exit=101 oom=false error=
    ─── httparena-...-authsvc-1 — last 120 log lines ───
      | bind 0.0.0.0:9090: Address in use (os error 98)

Verified against real containers: two stale stacks from other projects are
found, named and removed while an unlabelled sidecar survives, and a stack
whose service exits 101 has its stderr printed.

Leaves authsvc alone. Refusing to start when its port is taken is correct; the
bug was the port still being taken.
@MDA2AV
MDA2AV force-pushed the bump-fulmine-5.12 branch from d67f77d to ceb6be6 Compare August 16, 2026 11:24
@MDA2AV

MDA2AV commented Aug 16, 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: fulmine | Test: all tests

Test Conn RPS CPU Mem Δ RPS Δ Mem
baseline 512 1,292,121 6819.6% 2.6GiB -1.8% ~0%
baseline 4096 1,266,580 6779.6% 2.6GiB -1.9% -3.7%
pipelined 512 30,882,307 6714.5% 2.1GiB -0.7% ~0%
pipelined 4096 30,934,554 6698.6% 2.1GiB +0.5% ~0%
limited-conn 512 1,076,033 6195.8% 2.6GiB -0.5% -3.7%
limited-conn 4096 1,158,509 6445.4% 2.7GiB -0.6% ~0%
json 4096 1,077,143 6429.5% 6.7GiB -2.2% -17.3%
json-comp 512 324,562 6179.7% 8.1GiB -1.9% -2.4%
json-comp 4096 333,196 6395.3% 8.7GiB -1.2% -3.3%
json-comp 16384 352,632 6306.5% 10.2GiB ~0% -1.9%
json-tls 4096 997,582 6597.7% 8.1GiB -3.5% +1.2%
upload 32 2,039 3125.9% 6.7GiB ~0% +1.5%
upload 256 2,132 6115.6% 7.0GiB -0.7% -2.8%
api-4 256 34,672 380.9% 552MiB +3.5% +3.0%
api-16 1024 124,590 1536.7% 2.2GiB +1.7% +4.8%
static 1024 360,520 6572.0% 6.5GiB -0.1% +1.6%
static 4096 476,210 6576.2% 7.8GiB +1.0% +1.3%
static 6800 517,365 6528.6% 7.6GiB +0.2% ~0%
static-tls 1024 310,406 6567.2% 6.2GiB -1.5% -1.6%
static-tls 4096 391,708 6510.4% 7.3GiB -0.9% ~0%
static-tls 6800 414,257 6392.7% 7.4GiB -0.5% ~0%
async-db 1024 226,105 5976.3% 3.7GiB -0.8% -14.0%
crud 4096 357,461 4334.5% 8.4GiB ~0% +3.7%
fortunes 1024 68,134 6506.0% 4.3GiB ~0% ~0%
gateway-64 512 89,193 4325.2% 4.6GiB -0.1% -2.1%
gateway-64 1024 79,544 4048.5% 7.0GiB -0.6% +6.1%
gateway-h3 64 90,472 3463.7% 2.9GiB ~0% ~0%
gateway-h3 256 62,104 2565.1% 4.2GiB +1.0% +2.4%
Full log
#8 [edge internal] load metadata for docker.io/library/caddy:2-alpine
#8 DONE 0.2s

#9 [edge internal] load .dockerignore
#9 transferring context: 2B done
#9 DONE 0.1s

#10 [server internal] load build context
#10 transferring context: 124B done
#10 DONE 0.1s

#11 [server build 1/6] FROM docker.io/library/node:26-trixie-slim@sha256:4ebb5ace66f15a24c14c492e01a8beeed4fddf970a856109f5126e703e5fe503
#11 resolve docker.io/library/node:26-trixie-slim@sha256:4ebb5ace66f15a24c14c492e01a8beeed4fddf970a856109f5126e703e5fe503 0.1s done
#11 DONE 0.1s

#12 [server build 4/6] WORKDIR /app
#12 CACHED

#13 [server build 5/6] COPY package.json .
#13 CACHED

#14 [server build 2/6] RUN apt-get update &&     apt-get install -y --no-install-recommends ca-certificates git python3 make g++ libpq-dev &&     rm -rf /var/lib/apt/lists/*
#14 CACHED

#15 [server stage-1 4/6] COPY --from=build /app/node_modules ./node_modules
#15 CACHED

#16 [server stage-1 5/6] COPY app.js .
#16 CACHED

#17 [server stage-1 3/6] WORKDIR /app
#17 CACHED

#18 [server build 3/6] RUN git config --global url."https://github.com/".insteadOf "ssh://git@github.com/"
#18 CACHED

#19 [server stage-1 2/6] RUN apt-get update &&     apt-get install -y --no-install-recommends ca-certificates curl libpq5 &&     rm -rf /var/lib/apt/lists/*
#19 CACHED

#20 [server build 6/6] RUN npm install --omit=dev
#20 CACHED

#21 [server stage-1 6/6] COPY views ./views
#21 CACHED

#22 [edge internal] load build context
#22 transferring context: 31B done
#22 DONE 0.0s

#23 [server] exporting to image
#23 exporting layers done
#23 exporting manifest sha256:56a2fc6c3203f6db8b2f5bc844000881a31c8f4a96ffab960f6387a25466f63e 0.0s done
#23 exporting config sha256:b7977f9e827e6c921c077825d5dd0360f33181806473b456046f998ea0c366fb
#23 ...

#24 [edge 1/2] FROM docker.io/library/caddy:2-alpine@sha256:5f5c8640aae01df9654968d946d8f1a56c497f1dd5c5cda4cf95ab7c14d58648
#24 resolve docker.io/library/caddy:2-alpine@sha256:5f5c8640aae01df9654968d946d8f1a56c497f1dd5c5cda4cf95ab7c14d58648 0.1s done
#24 DONE 0.1s

#25 [edge 2/2] COPY Caddyfile /etc/caddy/Caddyfile
#25 CACHED

#23 [server] exporting to image
#23 exporting config sha256:b7977f9e827e6c921c077825d5dd0360f33181806473b456046f998ea0c366fb 0.0s done
#23 exporting attestation manifest sha256:c1c35d8407e89f382316b0cb654a3ce5072f49cde54f6f0820446128971a0363
#23 exporting attestation manifest sha256:c1c35d8407e89f382316b0cb654a3ce5072f49cde54f6f0820446128971a0363 0.1s done
#23 exporting manifest list sha256:bb42c6ec589cb749c124b935c959031d21f690e1b8db4389d69e042b5d3cb06c 0.0s done
#23 naming to docker.io/library/httparena-fulmine-production-stack-server:latest 0.0s done
#23 unpacking to docker.io/library/httparena-fulmine-production-stack-server:latest 0.0s done
#23 DONE 0.3s

#26 [edge] exporting to image
#26 exporting layers done
#26 exporting manifest sha256:6f210f15ed07e96fb74f9d8b48189c29ecff1488044a8da818fba160b96fb2f2 0.0s done
#26 exporting config sha256:badf4c570c6d598fd4178c7b6eeb09bd946a54dfa5b33cd676484b4fb6c58e5d 0.0s done
#26 exporting attestation manifest sha256:dfb35aadf7ae606568b46702a17fb875318836416ed90632629756f125ac8bd3 0.1s done
#26 exporting manifest list sha256:b3c61767e2c37ce799cc859c432cbbe245e722aa3a1d2ea9a901526e1011d095 0.0s done
#26 naming to docker.io/library/httparena-fulmine-production-stack-edge:latest done
#26 unpacking to docker.io/library/httparena-fulmine-production-stack-edge:latest 0.0s done
#26 DONE 0.3s

#27 [authsvc internal] load metadata for docker.io/library/rust:1-alpine
#27 DONE 0.8s

#5 [authsvc internal] load metadata for docker.io/library/alpine:3.20
#5 DONE 0.9s

#28 [authsvc internal] load .dockerignore
#28 transferring context: 65B done
#28 DONE 0.0s

#29 [authsvc internal] load build context
#29 DONE 0.0s

#30 [authsvc build 1/7] FROM docker.io/library/rust:1-alpine@sha256:3c38f3f82c2f3d73da3b38e18d279393a04cb43ddded0e35088a8c3324d40900
#30 resolve docker.io/library/rust:1-alpine@sha256:3c38f3f82c2f3d73da3b38e18d279393a04cb43ddded0e35088a8c3324d40900 0.1s done
#30 DONE 0.1s

#31 [authsvc stage-1 1/3] FROM docker.io/library/alpine:3.20@sha256:d9e853e87e55526f6b2917df91a2115c36dd7c696a35be12163d44e6e2a4b6bc
#31 resolve docker.io/library/alpine:3.20@sha256:d9e853e87e55526f6b2917df91a2115c36dd7c696a35be12163d44e6e2a4b6bc 0.1s done
#31 DONE 0.1s

#29 [authsvc internal] load build context
#29 transferring context: 86B done
#29 DONE 0.0s

#32 [authsvc build 5/7] RUN mkdir src && echo 'fn main() {}' > src/main.rs &&     cargo build --release &&     rm -rf src target/release/deps/authsvc*
#32 CACHED

#33 [authsvc build 6/7] COPY src ./src
#33 CACHED

#34 [authsvc stage-1 2/3] RUN apk add --no-cache ca-certificates
#34 CACHED

#35 [authsvc build 3/7] RUN apk add --no-cache musl-dev pkgconfig
#35 CACHED

#36 [authsvc build 4/7] COPY Cargo.toml .
#36 CACHED

#37 [authsvc build 7/7] RUN cargo build --release &&     strip target/release/authsvc
#37 CACHED

#38 [authsvc build 2/7] WORKDIR /build
#38 CACHED

#39 [authsvc stage-1 3/3] COPY --from=build /build/target/release/authsvc /usr/local/bin/authsvc
#39 CACHED

#40 [server] resolving provenance for metadata file
#40 DONE 0.0s

#41 [edge] resolving provenance for metadata file
#41 DONE 0.0s

#42 [authsvc] exporting to image
#42 exporting layers done
#42 exporting manifest sha256:cbec56b40de0e4df46dcaf00dfeddc08b6437a1aba23b201263b36eb6244c33f 0.0s done
#42 exporting config sha256:7d2025dba1ada10e5e24f7fee7bdd851ed313cda33740d84faa8641fdee06f31 0.0s done
#42 exporting attestation manifest sha256:b0202c8c4185dc8c913a3f7a9a523e44399ec39957aec9fbbac9b9807610cad3 0.1s done
#42 exporting manifest list sha256:3100b9d8ea90fb10ac14b2db862183a4bac13b92b9acafc1d2d48905fab6ac76
#42 exporting manifest list sha256:3100b9d8ea90fb10ac14b2db862183a4bac13b92b9acafc1d2d48905fab6ac76 0.0s done
#42 naming to docker.io/library/httparena-fulmine-production-stack-authsvc:latest done
#42 unpacking to docker.io/library/httparena-fulmine-production-stack-authsvc:latest done
#42 DONE 0.2s

#43 [authsvc] resolving provenance for metadata file
#43 DONE 0.0s
 Image httparena-fulmine-production-stack-authsvc Built 
 Image httparena-fulmine-production-stack-server Built 
 Image httparena-fulmine-production-stack-edge Built 
 Container httparena-fulmine-production-stack-authsvc-1 Creating 
 Container httparena-fulmine-production-stack-cache-1 Creating 
 Container httparena-fulmine-production-stack-authsvc-1 Created 
 Container httparena-fulmine-production-stack-cache-1 Created 
 Container httparena-fulmine-production-stack-server-1 Creating 
 Container httparena-fulmine-production-stack-server-1 Created 
 Container httparena-fulmine-production-stack-edge-1 Creating 
 Container httparena-fulmine-production-stack-edge-1 Created 
 Container httparena-fulmine-production-stack-cache-1 Starting 
 Container httparena-fulmine-production-stack-authsvc-1 Starting 
 Container httparena-fulmine-production-stack-authsvc-1 Started 
 Container httparena-fulmine-production-stack-cache-1 Started 
 Container httparena-fulmine-production-stack-server-1 Starting 
 Container httparena-fulmine-production-stack-server-1 Started 
 Container httparena-fulmine-production-stack-authsvc-1 Waiting 
 Container httparena-fulmine-production-stack-authsvc-1 Error dependency authsvc failed to start
dependency failed to start: container httparena-fulmine-production-stack-authsvc-1 exited (101)

─── httparena-fulmine-production-stack-edge-1 — status=created exit=0 oom=false error=
─── httparena-fulmine-production-stack-edge-1 — the container produced no output at all

─── httparena-fulmine-production-stack-server-1 — status=running exit=0 oom=false error=
─── httparena-fulmine-production-stack-server-1 — the container produced no output at all

─── httparena-fulmine-production-stack-cache-1 — status=exited exit=1 oom=false error=
─── httparena-fulmine-production-stack-cache-1 — last 120 log lines ───
  | 7:C 16 Aug 2026 11:41:31.285 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
  | 7:C 16 Aug 2026 11:41:31.285 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
  | 7:C 16 Aug 2026 11:41:31.285 * Redis version=7.4.8, bits=64, commit=00000000, modified=0, pid=7, just started
  | 7:C 16 Aug 2026 11:41:31.285 * Configuration loaded
  | 7:M 16 Aug 2026 11:41:31.285 * monotonic clock: POSIX clock_gettime
  | [redis] seeded from /seed.txt
  | 7:M 16 Aug 2026 11:41:31.286 * Running mode=standalone, port=6379.
  | 7:M 16 Aug 2026 11:41:31.286 # Warning: Could not create server TCP listening socket 0.0.0.0:6379: bind: Address in use
  | 7:M 16 Aug 2026 11:41:31.286 # Failed listening on port 6379 (tcp), aborting.
─── httparena-fulmine-production-stack-cache-1 — end of logs ───

─── httparena-fulmine-production-stack-authsvc-1 — status=exited exit=101 oom=false error=
─── httparena-fulmine-production-stack-authsvc-1 — last 120 log lines ───
  | 
  | thread 'main' (1) panicked at src/main.rs:59:29:
  | bind 0.0.0.0:9090: Address in use (os error 98)
  | note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
─── httparena-fulmine-production-stack-authsvc-1 — end of logs ───
[FAIL] gateway compose up failed
httparena-postgres
httparena-redis
[info] restoring loopback MTU to 65536

@MDA2AV

MDA2AV commented Aug 16, 2026

Copy link
Copy Markdown
Owner

/benchmark -f fulmine -t production-stack --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: fulmine | Test: production-stack

Test Conn RPS CPU Mem Δ RPS Δ Mem
production-stack 256 58,601 4000.6% 3.4GiB -1.5% +6.2%
production-stack 1024 48,867 3887.1% 5.2GiB -0.6% -1.9%
Full log
 Container httparena-fulmine-production-stack-cache-1 Created 
 Container httparena-fulmine-production-stack-server-1 Creating 
 Container httparena-fulmine-production-stack-server-1 Created 
 Container httparena-fulmine-production-stack-edge-1 Creating 
 Container httparena-fulmine-production-stack-edge-1 Created 
 Container httparena-fulmine-production-stack-authsvc-1 Starting 
 Container httparena-fulmine-production-stack-cache-1 Starting 
 Container httparena-fulmine-production-stack-authsvc-1 Started 
 Container httparena-fulmine-production-stack-cache-1 Started 
 Container httparena-fulmine-production-stack-server-1 Starting 
 Container httparena-fulmine-production-stack-server-1 Started 
 Container httparena-fulmine-production-stack-authsvc-1 Waiting 
 Container httparena-fulmine-production-stack-authsvc-1 Healthy 
 Container httparena-fulmine-production-stack-edge-1 Starting 
 Container httparena-fulmine-production-stack-edge-1 Started 
[info] gateway containers: 3 (efda2a226be5 7da641707c1e f1bb01314ad9 )
[warn] production-stack expects exactly 4 containers, found 3 — stats may not sum correctly
[info] waiting for server...
[info] server ready

[run 1/3]
=== h2load-reads ===
starting benchmark...
1.
43Main benchmark duration is started for thread #28.
.
.
61.

22.
8.
23.
18.
35.

TLS Protocol: TLSv1.3
Cipher: TLS_AES_128_GCM_SHA256
Server Temp Key: X25519 253 bits
Application protocol: h2

62. Stopping all clients.
19Stopped all clients for thread #40
. Stopping all clients.
15. Stopping all clients.
58
36. Stopping all clients.
. Stopping all clients.

finished in 5.05s, 41589.80 req/s, 452.71MB/s
requests: 207949 total, 224333 started, 207949 done, 205108 succeeded, 2841 failed, 0 errored, 0 timeout
status codes: 205388 2xx, 0 3xx, 2841 4xx, 0 5xx
traffic: 2.21GB (2373520916) total, 2.33MB (2442731) headers (space savings 92.87%), 2.20GB (2365929257) data
                     min         max         mean         sd        +/- sd
time for request:      167us       2.48s    353.87ms    273.78ms    63.26%
time for connect:    16.95ms    888.56ms    206.76ms    196.20ms    80.27%
time to 1st byte:    24.44ms    891.60ms    405.28ms    216.78ms    55.18%
req/s           :      31.80       50.19       40.61        3.45    65.33%
=== h2load-writes ===
starting benchmark...
TLS Protocol: TLSv1.3
Cipher: TLS_AES_128_GCM_SHA256
Server Temp Key: X25519 253 bits
Application protocol: h2

finished in 5.00s, 1837.20 req/s, 34.57KB/s
requests: 9186 total, 10210 started, 9186 done, 9026 succeeded, 160 failed, 0 errored, 0 timeout
status codes: 9026 2xx, 0 3xx, 160 4xx, 0 5xx
traffic: 172.84KB (176988) total, 59.59KB (61024) headers (space savings 90.50%), 22.50KB (23040) data
                     min         max         mean         sd        +/- sd
time for request:     3.90ms       2.11s    515.46ms    218.84ms    74.82%
time for connect:     2.77ms    209.53ms     61.85ms     41.80ms    71.09%
time to 1st byte:    43.69ms       1.38s    453.82ms    296.23ms    74.22%
req/s           :      10.60       17.20       14.35        1.32    69.53%
[info] CPU 3830.9% | Mem 4.1GiB
[info]   edge: 2830% 2.3GiB | authsvc: 322% 268MiB | server: 679% 1.6GiB

[run 2/3]
=== h2load-reads ===
starting benchmark...
progress: Main benchmark duration is started for thread #2517.% of clients started
4.

.
.
.Warm-up phase is over for thread #
3Main benchmark duration is started for thread #22.
.



61.
TLS Protocol: TLSv1.3
Cipher: TLS_AES_128_GCM_SHA256
Server Temp Key: X25519 253 bits
Application protocol: h2
0

48. Stopping all clients.
21Stopped all clients for thread #
41Stopped all clients for thread #48

. Stopping all clients.


finished in 5.06s, 47075.20 req/s, 501.89MB/s
requests: 235376 total, 251760 started, 235376 done, 235307 succeeded, 69 failed, 0 errored, 0 timeout
status codes: 235527 2xx, 0 3xx, 69 4xx, 0 5xx
traffic: 2.45GB (2631344994) total, 2.52MB (2641943) headers (space savings 93.15%), 2.44GB (2622916032) data
                     min         max         mean         sd        +/- sd
time for request:      175us       2.53s    323.46ms    235.44ms    64.97%
time for connect:     3.24ms    973.43ms    112.03ms    141.21ms    91.70%
time to 1st byte:     7.38ms       1.03s    219.65ms    182.76ms    82.42%
req/s           :      31.99       57.58       45.96        2.88    70.41%
=== h2load-writes ===
starting benchmark...
progress: Warm-up phase is over for thread #87% of clients started
7.

TLS Protocol: TLSv1.3
Cipher: TLS_AES_128_GCM_SHA256
Server Temp Key: X25519 253 bits
Application protocol: h2

finished in 5.00s, 2355.60 req/s, 37.25KB/s
requests: 11778 total, 12802 started, 11778 done, 11741 succeeded, 37 failed, 0 errored, 0 timeout
status codes: 11741 2xx, 0 3xx, 37 4xx, 0 5xx
traffic: 186.24KB (190712) total, 67.29KB (68900) headers (space savings 91.44%), 5.20KB (5328) data
                     min         max         mean         sd        +/- sd
time for request:     1.90ms       2.39s    413.17ms    239.14ms    72.86%
time for connect:     2.67ms     31.25ms     17.96ms      8.22ms    58.59%
time to 1st byte:     6.85ms    148.12ms     51.13ms     30.38ms    79.69%
req/s           :      14.80       23.20       18.40        1.57    68.75%
[info] CPU 3887.1% | Mem 5.2GiB
[info]   edge: 2938% 2.6GiB | authsvc: 397% 290MiB | server: 553% 2.3GiB

[run 3/3]
=== h2load-reads ===
starting benchmark...
43.
4.
17.
progress: Main benchmark duration is started for thread #21.
41.

25% of clients started
11.
.Warm-up phase is over for thread #
31.

10.
100% of clients started
TLS Protocol: TLSv1.3
Cipher: TLS_AES_128_GCM_SHA256
Server Temp Key: X25519 253 bits
Application protocol: h2

15. Stopping all clients.
50. Stopping all clients.
40. Stopping all clients.

finished in 5.05s, 43459.00 req/s, 467.31MB/s
requests: 217295 total, 233679 started, 217295 done, 217272 succeeded, 23 failed, 0 errored, 0 timeout
status codes: 217532 2xx, 0 3xx, 23 4xx, 0 5xx
traffic: 2.28GB (2450059692) total, 2.35MB (2465918) headers (space savings 93.08%), 2.27GB (2442233436) data
                     min         max         mean         sd        +/- sd
time for request:      277us       4.42s    350.58ms    249.94ms    60.98%
time for connect:     3.35ms    551.00ms     66.32ms     56.18ms    92.29%
time to 1st byte:    28.83ms    882.50ms    193.04ms     95.87ms    80.47%
req/s           :      32.39       52.79       42.43        2.28    71.29%
=== h2load-writes ===
starting benchmark...
TLS Protocol: TLSv1.3
Cipher: TLS_AES_128_GCM_SHA256
Server Temp Key: X25519 253 bits
Application protocol: h2

finished in 5.00s, 2290.80 req/s, 35.69KB/s
requests: 11454 total, 12478 started, 11454 done, 11440 succeeded, 14 failed, 0 errored, 0 timeout
status codes: 11440 2xx, 0 3xx, 14 4xx, 0 5xx
traffic: 178.43KB (182716) total, 65.75KB (67326) headers (space savings 91.37%), 1.97KB (2016) data
                     min         max         mean         sd        +/- sd
time for request:     1.07ms       1.54s    417.14ms    239.92ms    63.59%
time for connect:     3.62ms     31.70ms     18.43ms      8.25ms    58.59%
time to 1st byte:     6.45ms    158.98ms     50.11ms     26.36ms    75.00%
req/s           :      13.60       22.00       17.89        1.61    67.19%
[info] CPU 3814.7% | Mem 5.0GiB
[info]   edge: 2905% 2.5GiB | authsvc: 409% 206MiB | server: 501% 2.4GiB

=== Best: 48867 req/s (CPU: 3887.1%, Mem: 5.2GiB) ===
[info] saved results/production-stack/1024/fulmine.json
[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/fulmine.json - 2 new, 38 total
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/current.json
[info] done
httparena-postgres
httparena-redis
[info] restoring loopback MTU to 65536

@MDA2AV

MDA2AV commented Aug 16, 2026

Copy link
Copy Markdown
Owner

/benchmark -f fulmine -t echo-ws --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: fulmine | Test: echo-ws

Test Conn RPS CPU Mem Δ RPS Δ Mem
echo-ws 512 3,837,580 6503.6% 2.4GiB +3.0% ~0%
echo-ws 4096 3,877,415 6330.1% 2.4GiB +2.0% ~0%
echo-ws 16384 3,659,584 6211.0% 2.5GiB +2.0% ~0%
Full log
  19187901 frames sent in 5.00s, 19187901 frames received
  Throughput: 3.84M req/s
  Bandwidth:  25.61MB/s
  WS upgrades: 512
  WS frames:   19187901
  Latency samples: 19187814 / 19187901 responses (100.0%)
[info] CPU 6503.6% | Mem 2.4GiB

[run 3/3]
gcannon v0.5.3 [WS]
  Target:    localhost:8080/ws
  Threads:   64
  Conns:     512 (8/thread)
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency    133us    116us    217us    371us    586us

  19112149 frames sent in 5.00s, 19112146 frames received
  Throughput: 3.82M req/s
  Bandwidth:  25.51MB/s
  WS upgrades: 512
  WS frames:   19115024
  Latency samples: 19115105 / 19112146 responses (100.0%)

  WARNING: 18446744073709548738/19112146 responses (96518434265359.6%) had unexpected status (expected 2xx)
[info] CPU 6468.1% | Mem 2.4GiB

=== Best: 3837580 req/s (CPU: 6503.6%, Mem: 2.4GiB) ===
[info] saved results/echo-ws/512/fulmine.json
httparena-bench-fulmine
httparena-bench-fulmine

==============================================
=== fulmine / echo-ws / 4096c (tool=gcannon) ===
==============================================
[info] waiting for server...
[info] server ready

[run 1/3]
gcannon v0.5.3 [WS]
  Target:    localhost:8080/ws
  Threads:   64
  Conns:     4096 (64/thread)
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   1.05ms    976us   1.51ms   2.24ms   2.76ms

  19389270 frames sent in 5.00s, 19387077 frames received
  Throughput: 3.88M req/s
  Bandwidth:  25.95MB/s
  WS upgrades: 4096
  WS frames:   19387077
  Latency samples: 19387044 / 19387077 responses (100.0%)
[info] CPU 6330.1% | Mem 2.4GiB

[run 2/3]
gcannon v0.5.3 [WS]
  Target:    localhost:8080/ws
  Threads:   64
  Conns:     4096 (64/thread)
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   1.06ms    984us   1.47ms   2.25ms   3.86ms

  19344542 frames sent in 5.00s, 19344541 frames received
  Throughput: 3.87M req/s
  Bandwidth:  25.81MB/s
  WS upgrades: 4096
  WS frames:   19344541
  Latency samples: 19344464 / 19344541 responses (100.0%)
[info] CPU 6553.0% | Mem 2.4GiB

[run 3/3]
gcannon v0.5.3 [WS]
  Target:    localhost:8080/ws
  Threads:   64
  Conns:     4096 (64/thread)
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   1.06ms    976us   1.50ms   2.27ms   4.01ms

  19274750 frames sent in 5.00s, 19274750 frames received
  Throughput: 3.85M req/s
  Bandwidth:  25.72MB/s
  WS upgrades: 4096
  WS frames:   19274750
  Latency samples: 19274683 / 19274750 responses (100.0%)
[info] CPU 6306.2% | Mem 2.4GiB

=== Best: 3877415 req/s (CPU: 6330.1%, Mem: 2.4GiB) ===
[info] saved results/echo-ws/4096/fulmine.json
httparena-bench-fulmine
httparena-bench-fulmine

==============================================
=== fulmine / echo-ws / 16384c (tool=gcannon) ===
==============================================
[info] waiting for server...
[info] server ready

[run 1/3]
gcannon v0.5.3 [WS]
  Target:    localhost:8080/ws
  Threads:   64
  Conns:     16384 (256/thread)
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   4.45ms   4.24ms   5.21ms   8.75ms   10.20ms

  18085241 frames sent in 5.00s, 18068857 frames received
  Throughput: 3.61M req/s
  Bandwidth:  24.64MB/s
  WS upgrades: 16384
  WS frames:   18068857
  Latency samples: 18068857 / 18068857 responses (100.0%)
[info] CPU 6080.3% | Mem 2.5GiB

[run 2/3]
gcannon v0.5.3 [WS]
  Target:    localhost:8080/ws
  Threads:   64
  Conns:     16384 (256/thread)
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   4.45ms   4.20ms   5.21ms   8.79ms   10.30ms

  18299221 frames sent in 5.00s, 18282837 frames received
  Throughput: 3.66M req/s
  Bandwidth:  24.92MB/s
  WS upgrades: 16384
  WS frames:   18282837
  Latency samples: 18282837 / 18282837 responses (100.0%)
[info] CPU 6502.5% | Mem 2.5GiB

[run 3/3]
gcannon v0.5.3 [WS]
  Target:    localhost:8080/ws
  Threads:   64
  Conns:     16384 (256/thread)
  Pipeline:  1
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   4.45ms   4.25ms   5.14ms   8.79ms   10.30ms

  18314308 frames sent in 5.00s, 18297924 frames received
  Throughput: 3.66M req/s
  Bandwidth:  24.94MB/s
  WS upgrades: 16384
  WS frames:   18297924
  Latency samples: 18297924 / 18297924 responses (100.0%)
[info] CPU 6211.0% | Mem 2.5GiB

=== Best: 3659584 req/s (CPU: 6211.0%, Mem: 2.5GiB) ===
[info] saved results/echo-ws/16384/fulmine.json
httparena-bench-fulmine
httparena-bench-fulmine
[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/fulmine.json - 3 new, 38 total
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/current.json
[info] done
httparena-postgres
httparena-redis
[info] restoring loopback MTU to 65536

@MDA2AV

MDA2AV commented Aug 16, 2026

Copy link
Copy Markdown
Owner

/benchmark -f fulmine -t echo-ws-pipelined --save

@github-actions

Copy link
Copy Markdown
Contributor

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

@MDA2AV

MDA2AV commented Aug 16, 2026

Copy link
Copy Markdown
Owner

/benchmark -f fulmine -t echo-ws-limited --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: fulmine | Test: echo-ws-pipelined

No results captured

Full log
[info] available CPUs: 128
[info] framework: fulmine (fulmine, JS)
[info] subscribed tests: baseline,pipelined,limited-conn,json,json-comp,upload,api-4,api-16,async-db,static,static-tls,echo-ws,echo-ws-pipeline,echo-ws-limited,json-tls,crud,gateway-64,gateway-h3,production-stack,fortunes
[info] building image: httparena-fulmine
#0 building with "default" instance using docker driver

#1 [internal] load build definition from Dockerfile
#1 transferring dockerfile: 782B done
#1 DONE 0.0s

#2 [internal] load metadata for docker.io/library/node:26-trixie-slim
#2 DONE 0.7s

#3 [internal] load .dockerignore
#3 transferring context: 2B done
#3 DONE 0.0s

#4 [internal] load build context
#4 transferring context: 21.75kB done
#4 DONE 0.0s

#5 [build 1/6] FROM docker.io/library/node:26-trixie-slim@sha256:4ebb5ace66f15a24c14c492e01a8beeed4fddf970a856109f5126e703e5fe503
#5 resolve docker.io/library/node:26-trixie-slim@sha256:4ebb5ace66f15a24c14c492e01a8beeed4fddf970a856109f5126e703e5fe503 0.0s done
#5 DONE 0.0s

#6 [build 3/6] RUN git config --global url."https://github.com/".insteadOf "ssh://git@github.com/"
#6 CACHED

#7 [stage-1 5/6] COPY app.js .
#7 CACHED

#8 [build 4/6] WORKDIR /app
#8 CACHED

#9 [stage-1 4/6] COPY --from=build /app/node_modules ./node_modules
#9 CACHED

#10 [stage-1 3/6] WORKDIR /app
#10 CACHED

#11 [build 6/6] RUN npm install --omit=dev
#11 CACHED

#12 [stage-1 2/6] RUN apt-get update &&     apt-get install -y --no-install-recommends ca-certificates curl libpq5 &&     rm -rf /var/lib/apt/lists/*
#12 CACHED

#13 [build 2/6] RUN apt-get update &&     apt-get install -y --no-install-recommends ca-certificates git python3 make g++ libpq-dev &&     rm -rf /var/lib/apt/lists/*
#13 CACHED

#14 [build 5/6] COPY package.json .
#14 CACHED

#15 [stage-1 6/6] COPY views ./views
#15 CACHED

#16 exporting to image
#16 exporting layers done
#16 exporting manifest sha256:8e328c477dd8600a4e0c0e9ca86c3a6c88ad2813c977ac0edab146be874aa5d6 done
#16 exporting config sha256:26bbcd43fc5737bab8f25dc826ccab22c3c02547adebff1e9a4ad256d2df882e
#16 exporting config sha256:26bbcd43fc5737bab8f25dc826ccab22c3c02547adebff1e9a4ad256d2df882e done
#16 exporting attestation manifest sha256:0e905896fb3116d134404ffbb0d2eb0d9fdbba2febcc7d820b247719a87a786b 0.0s done
#16 exporting manifest list sha256:8e89bdd5512dff8fb3f0997d1bb1374ad6aa8bad4cbe26c8721234197a176f9a 0.0s done
#16 naming to docker.io/library/httparena-fulmine:latest done
#16 unpacking to docker.io/library/httparena-fulmine:latest done
#16 DONE 0.1s
[info] tuning host for benchmark runs
[info] CPU governor → performance
[info] setting kernel socket limits
[info] setting UDP buffer sizes for QUIC
[info] setting loopback MTU to 1500 (realistic Ethernet)
[info] restarting docker daemon
[info] dropping kernel caches
[info] starting postgres sidecar
[info] postgres ready (seeded)
[info] starting redis sidecar (cpuset=0,64)
[info] redis ready
[warn] unknown profile: echo-ws-pipelined
[info] rebuilding site/data/*.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/frameworks.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/current.json
[info] done
httparena-postgres
httparena-redis
[info] restoring loopback MTU to 65536

@MDA2AV

MDA2AV commented Aug 16, 2026

Copy link
Copy Markdown
Owner

/benchmark -f fulmine -t echo-ws-pipeline --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: fulmine | Test: echo-ws-limited

Test Conn RPS CPU Mem Δ RPS Δ Mem
echo-ws-limited 512 2,105,748 5407.0% 2.4GiB +1.1% ~0%
echo-ws-limited 4096 2,619,565 6220.4% 2.4GiB +2.1% ~0%
Full log
#13 [build 4/6] WORKDIR /app
#13 CACHED

#14 [build 5/6] COPY package.json .
#14 CACHED

#15 [stage-1 6/6] COPY views ./views
#15 CACHED

#16 exporting to image
#16 exporting layers done
#16 exporting manifest sha256:8e328c477dd8600a4e0c0e9ca86c3a6c88ad2813c977ac0edab146be874aa5d6 done
#16 exporting config sha256:26bbcd43fc5737bab8f25dc826ccab22c3c02547adebff1e9a4ad256d2df882e done
#16 exporting attestation manifest sha256:c8c2169a16d8a00dab7870af1cd015cfb5d93cf20835c28f7699308e0d0520e2 0.0s done
#16 exporting manifest list sha256:66fa5b883eaf5d5714f993bb86788e3dc8a7cb5b0bd103e189e817d4a29105cb 0.0s done
#16 naming to docker.io/library/httparena-fulmine:latest
#16 naming to docker.io/library/httparena-fulmine:latest done
#16 unpacking to docker.io/library/httparena-fulmine:latest 0.0s done
#16 DONE 0.1s
[info] tuning host for benchmark runs
[info] CPU governor → performance
[info] setting kernel socket limits
[info] setting UDP buffer sizes for QUIC
[info] setting loopback MTU to 1500 (realistic Ethernet)
[info] restarting docker daemon
[info] dropping kernel caches
[info] starting postgres sidecar
[info] postgres ready (seeded)
[info] starting redis sidecar (cpuset=0,64)
[info] redis ready

==============================================
=== fulmine / echo-ws-limited / 512c (tool=gcannon) ===
==============================================
[info] waiting for server...
[info] server ready

[run 1/3]
gcannon v0.5.3 [WS]
  Target:    localhost:8080/ws
  Threads:   64
  Conns:     512 (8/thread)
  Pipeline:  1
  Req/conn:  10
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency    143us    115us    250us    551us   2.10ms

  10528680 frames sent in 5.00s, 10528740 frames received
  Throughput: 2.11M req/s
  Bandwidth:  47.38MB/s
  WS upgrades: 1067448
  WS frames:   10528740
  Latency samples: 10528690 / 10528740 responses (100.0%)
  Reconnects: 1052898
[info] CPU 5407.0% | Mem 2.4GiB

[run 2/3]
gcannon v0.5.3 [WS]
  Target:    localhost:8080/ws
  Threads:   64
  Conns:     512 (8/thread)
  Pipeline:  1
  Req/conn:  10
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency    134us    110us    241us    506us   1.03ms

  10399842 frames sent in 5.00s, 10399934 frames received
  Throughput: 2.08M req/s
  Bandwidth:  46.81MB/s
  WS upgrades: 1056272
  WS frames:   10399934
  Latency samples: 10399874 / 10399934 responses (100.0%)
  Reconnects: 1040038
[info] CPU 5437.1% | Mem 2.4GiB

[run 3/3]
gcannon v0.5.3 [WS]
  Target:    localhost:8080/ws
  Threads:   64
  Conns:     512 (8/thread)
  Pipeline:  1
  Req/conn:  10
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency    139us    114us    248us    527us   1.17ms

  10524553 frames sent in 5.00s, 10524608 frames received
  Throughput: 2.10M req/s
  Bandwidth:  47.37MB/s
  WS upgrades: 1067236
  WS frames:   10524608
  Latency samples: 10524572 / 10524608 responses (100.0%)
  Reconnects: 1052478
[info] CPU 5412.8% | Mem 2.4GiB

=== Best: 2105748 req/s (CPU: 5407.0%, Mem: 2.4GiB) ===
[info] saved results/echo-ws-limited/512/fulmine.json
httparena-bench-fulmine
httparena-bench-fulmine

==============================================
=== fulmine / echo-ws-limited / 4096c (tool=gcannon) ===
==============================================
[info] waiting for server...
[info] server ready

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   1.03ms    858us   1.68ms   3.06ms   5.89ms

  13037674 frames sent in 5.00s, 13035622 frames received
  Throughput: 2.61M req/s
  Bandwidth:  58.72MB/s
  WS upgrades: 1308525
  WS frames:   13035622
  Latency samples: 13036096 / 13035622 responses (100.0%)
  Reconnects: 1302554
[info] CPU 5918.0% | Mem 2.4GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   1.03ms    918us   1.68ms   2.79ms   3.81ms

  13098522 frames sent in 5.00s, 13097829 frames received
  Throughput: 2.62M req/s
  Bandwidth:  58.99MB/s
  WS upgrades: 1313237
  WS frames:   13097829
  Latency samples: 13097763 / 13097829 responses (100.0%)
  Reconnects: 1309920
[info] CPU 6220.4% | Mem 2.4GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   1.04ms    912us   1.74ms   2.90ms   3.90ms

  13091448 frames sent in 5.00s, 13091976 frames received
  Throughput: 2.62M req/s
  Bandwidth:  58.93MB/s
  WS upgrades: 1316062
  WS frames:   13091976
  Latency samples: 13091904 / 13091976 responses (100.0%)
  Reconnects: 1309396
[info] CPU 6037.7% | Mem 2.4GiB

=== Best: 2619565 req/s (CPU: 6220.4%, Mem: 2.4GiB) ===
[info] saved results/echo-ws-limited/4096/fulmine.json
httparena-bench-fulmine
httparena-bench-fulmine
[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/fulmine.json - 2 new, 38 total
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/current.json
[info] done
httparena-postgres
httparena-redis
[info] restoring loopback MTU to 65536

@github-actions

Copy link
Copy Markdown
Contributor

Benchmark Results

Framework: fulmine | Test: echo-ws-pipeline

Test Conn RPS CPU Mem Δ RPS Δ Mem
echo-ws-pipeline 512 25,620,221 6777.8% 2.4GiB +2.9% ~0%
echo-ws-pipeline 4096 25,409,603 6601.6% 2.4GiB +1.8% ~0%
echo-ws-pipeline 16384 24,029,696 6354.7% 2.6GiB +0.8% ~0%
Full log
    Latency    330us    293us    510us    919us   3.62ms

  123538608 frames sent in 5.00s, 123538608 frames received
  Throughput: 24.70M req/s
  Bandwidth:  164.90MB/s
  WS upgrades: 512
  WS frames:   123538608
  Latency samples: 123538160 / 123538608 responses (100.0%)
[info] CPU 6849.8% | Mem 2.4GiB

[run 3/3]
gcannon v0.5.3 [WS]
  Target:    localhost:8080/ws
  Threads:   64
  Conns:     512 (8/thread)
  Pipeline:  16
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency    334us    295us    549us   1.03ms   4.02ms

  122064448 frames sent in 5.00s, 122064447 frames received
  Throughput: 24.41M req/s
  Bandwidth:  162.93MB/s
  WS upgrades: 512
  WS frames:   122064447
  Latency samples: 122131184 / 122064447 responses (100.1%)
[info] CPU 6792.7% | Mem 2.4GiB

=== Best: 25620221 req/s (CPU: 6777.8%, Mem: 2.4GiB) ===
[info] saved results/echo-ws-pipeline/512/fulmine.json
httparena-bench-fulmine
httparena-bench-fulmine

==============================================
=== fulmine / echo-ws-pipeline / 4096c (tool=gcannon) ===
==============================================
[info] waiting for server...
[info] server ready

[run 1/3]
gcannon v0.5.3 [WS]
  Target:    localhost:8080/ws
  Threads:   64
  Conns:     4096 (64/thread)
  Pipeline:  16
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   2.58ms   2.51ms   3.00ms   4.86ms   6.36ms

  127082976 frames sent in 5.00s, 127048016 frames received
  Throughput: 25.40M req/s
  Bandwidth:  169.65MB/s
  WS upgrades: 4094
  WS frames:   127048016
  Latency samples: 127047712 / 127048016 responses (100.0%)
[info] CPU 6601.6% | Mem 2.4GiB

[run 2/3]
gcannon v0.5.3 [WS]
  Target:    localhost:8080/ws
  Threads:   64
  Conns:     4096 (64/thread)
  Pipeline:  16
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   2.65ms   2.55ms   3.15ms   5.86ms   7.03ms

  123375616 frames sent in 5.00s, 123375344 frames received
  Throughput: 24.67M req/s
  Bandwidth:  164.68MB/s
  WS upgrades: 4096
  WS frames:   123375344
  Latency samples: 123374928 / 123375344 responses (100.0%)
[info] CPU 6817.5% | Mem 2.4GiB

[run 3/3]
gcannon v0.5.3 [WS]
  Target:    localhost:8080/ws
  Threads:   64
  Conns:     4096 (64/thread)
  Pipeline:  16
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   2.68ms   2.57ms   3.19ms   6.03ms   7.16ms

  122069056 frames sent in 5.00s, 122050608 frames received
  Throughput: 24.40M req/s
  Bandwidth:  162.95MB/s
  WS upgrades: 4096
  WS frames:   122050608
  Latency samples: 122050160 / 122050608 responses (100.0%)
[info] CPU 6617.5% | Mem 2.4GiB

=== Best: 25409603 req/s (CPU: 6601.6%, Mem: 2.4GiB) ===
[info] saved results/echo-ws-pipeline/4096/fulmine.json
httparena-bench-fulmine
httparena-bench-fulmine

==============================================
=== fulmine / echo-ws-pipeline / 16384c (tool=gcannon) ===
==============================================
[info] waiting for server...
[info] server ready

[run 1/3]
gcannon v0.5.3 [WS]
  Target:    localhost:8080/ws
  Threads:   64
  Conns:     16384 (256/thread)
  Pipeline:  16
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   10.74ms   10.60ms   11.90ms   14.50ms   18.40ms

  120410624 frames sent in 5.00s, 120148480 frames received
  Throughput: 24.02M req/s
  Bandwidth:  160.89MB/s
  WS upgrades: 16384
  WS frames:   120148480
  Latency samples: 120148480 / 120148480 responses (100.0%)
[info] CPU 6354.7% | Mem 2.6GiB

[run 2/3]
gcannon v0.5.3 [WS]
  Target:    localhost:8080/ws
  Threads:   64
  Conns:     16384 (256/thread)
  Pipeline:  16
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   11.09ms   10.80ms   12.70ms   16.60ms   20.40ms

  117424288 frames sent in 5.00s, 117162144 frames received
  Throughput: 23.43M req/s
  Bandwidth:  156.91MB/s
  WS upgrades: 16384
  WS frames:   117162144
  Latency samples: 117162144 / 117162144 responses (100.0%)
[info] CPU 6780.9% | Mem 2.6GiB

[run 3/3]
gcannon v0.5.3 [WS]
  Target:    localhost:8080/ws
  Threads:   64
  Conns:     16384 (256/thread)
  Pipeline:  16
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   11.28ms   10.90ms   13.30ms   17.50ms   22.70ms

  115604912 frames sent in 5.00s, 115342768 frames received
  Throughput: 23.06M req/s
  Bandwidth:  154.48MB/s
  WS upgrades: 16384
  WS frames:   115342768
  Latency samples: 115342768 / 115342768 responses (100.0%)
[info] CPU 6461.9% | Mem 2.6GiB

=== Best: 24029696 req/s (CPU: 6354.7%, Mem: 2.6GiB) ===
[info] saved results/echo-ws-pipeline/16384/fulmine.json
httparena-bench-fulmine
httparena-bench-fulmine
[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/fulmine.json - 3 new, 38 total
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/current.json
[info] done
httparena-postgres
httparena-redis
[info] restoring loopback MTU to 65536

@nigrosimone nigrosimone changed the title frameworks/fulmine: bump to fulmine.js 5.12.0 frameworks/fulmine: bump to fulmine.js 5.12.2 Aug 16, 2026
@nigrosimone

Copy link
Copy Markdown
Contributor Author

Bumped to 5.12.2. 5.12.1 and 5.12.2 are correctness fixes only, all found by fuzzing the router against Express: request framing (a repeated or unparseable Content-Length is refused instead of routed), router.param() callbacks running for parameters the router did not capture, an error under OPTIONS not reaching the error handlers, HEAD not entering a matched layer, and the overlap analysis reading a wildcard or an optional group as literal text.

None of it touches the hot path. Measured with the repo's own A/B and a null control from the same sitting: hello-world 1.5% and routes-1000 1.9%, against a null floor of 2.0%, so nothing moved that the harness can see. The number of routes still registered natively is unchanged on every benchmark scenario, which is the thing that change could have hurt.

Worth flagging about the previous run: 10 of the 38 tests this entry subscribes to produced no result. The two production-stack rows are missing because the gateway compose failed to come up, with the shared frameworks/_shared/authsvc container exiting 101 while the edge waited for it to be healthy, and the 8 echo-ws* rows are absent with nothing in the visible log to say why. The authsvc image had built fine, so it looks like a startup problem rather than the entry. Not fulmine-specific either, that sidecar is shared with aspnet-minimal_nginx.

/benchmark --save

@github-actions

Copy link
Copy Markdown
Contributor

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

@nigrosimone

Copy link
Copy Markdown
Contributor Author

👍 From our side this is ready: the entry itself is unchanged, only the dependency moved, and 5.12.2 is on npm. Mergeable as far as we are concerned.

Left as a draft only until the benchmark run above comes back, so the saved numbers match the version being pinned. Happy for it to be merged whenever suits you.

@github-actions

Copy link
Copy Markdown
Contributor

Benchmark Results

Framework: fulmine | Test: all tests

Test Conn RPS CPU Mem Δ RPS Δ Mem
baseline 512 1,289,877 6791.8% 2.6GiB -2.0% ~0%
baseline 4096 1,260,704 6586.9% 2.7GiB -2.4% ~0%
pipelined 512 30,899,641 6765.5% 2.1GiB -0.7% ~0%
pipelined 4096 31,017,475 6387.3% 2.1GiB +0.8% ~0%
limited-conn 512 1,073,610 6143.4% 2.6GiB -0.7% -3.7%
limited-conn 4096 1,154,697 6478.2% 2.7GiB -0.9% ~0%
json 4096 1,078,657 6419.4% 6.7GiB -2.0% -17.3%
json-comp 512 327,135 6173.2% 8.1GiB -1.1% -2.4%
json-comp 4096 330,020 6406.0% 8.7GiB -2.1% -3.3%
json-comp 16384 351,540 6332.5% 10.3GiB -0.3% -1.0%
json-tls 4096 1,000,596 6478.0% 6.3GiB -3.2% -21.3%
upload 32 2,045 3179.7% 6.8GiB +0.2% +3.0%
upload 256 2,132 6075.3% 7.1GiB -0.7% -1.4%
api-4 256 36,414 394.1% 529MiB +8.7% -1.3%
api-16 1024 125,818 1552.5% 2.1GiB +2.7% ~0%
static 1024 360,271 6571.6% 6.4GiB -0.2% ~0%
static 4096 474,173 6591.5% 7.8GiB +0.5% +1.3%
static 6800 517,325 6525.9% 7.6GiB +0.2% ~0%
static-tls 1024 310,625 6574.5% 6.3GiB -1.4% ~0%
static-tls 4096 390,480 6515.8% 7.2GiB -1.2% -1.4%
static-tls 6800 413,128 6410.7% 7.4GiB -0.7% ~0%
async-db 1024 228,177 5560.6% 4.2GiB +0.1% -2.3%
crud 4096 360,321 4195.3% 8.4GiB +0.9% +3.7%
fortunes 1024 67,950 6500.0% 4.3GiB -0.2% ~0%
gateway-64 512 90,618 4425.5% 4.7GiB +1.5% ~0%
gateway-64 1024 82,561 4171.5% 6.5GiB +3.2% -1.5%
gateway-h3 64 90,310 3575.9% 2.9GiB -0.2% ~0%
gateway-h3 256 61,765 2582.1% 4.2GiB +0.5% +2.4%
Full log
#7 [edge internal] load metadata for docker.io/library/caddy:2-alpine
#7 DONE 0.2s

#8 [server internal] load .dockerignore
#8 transferring context: 2B done
#8 DONE 0.0s

#9 [edge internal] load .dockerignore
#9 transferring context: 2B done
#9 DONE 0.0s

#10 [server internal] load build context
#10 transferring context: 124B done
#10 DONE 0.1s

#11 [edge internal] load build context
#11 transferring context: 31B done
#11 DONE 0.1s

#12 [server build 1/6] FROM docker.io/library/node:26-trixie-slim@sha256:4ebb5ace66f15a24c14c492e01a8beeed4fddf970a856109f5126e703e5fe503
#12 resolve docker.io/library/node:26-trixie-slim@sha256:4ebb5ace66f15a24c14c492e01a8beeed4fddf970a856109f5126e703e5fe503 0.1s done
#12 DONE 0.1s

#13 [server stage-1 4/6] COPY --from=build /app/node_modules ./node_modules
#13 CACHED

#14 [server stage-1 3/6] WORKDIR /app
#14 CACHED

#15 [server build 4/6] WORKDIR /app
#15 CACHED

#16 [server build 6/6] RUN npm install --omit=dev
#16 CACHED

#17 [server build 3/6] RUN git config --global url."https://github.com/".insteadOf "ssh://git@github.com/"
#17 CACHED

#18 [server build 5/6] COPY package.json .
#18 CACHED

#19 [server build 2/6] RUN apt-get update &&     apt-get install -y --no-install-recommends ca-certificates git python3 make g++ libpq-dev &&     rm -rf /var/lib/apt/lists/*
#19 CACHED

#20 [server stage-1 2/6] RUN apt-get update &&     apt-get install -y --no-install-recommends ca-certificates curl libpq5 &&     rm -rf /var/lib/apt/lists/*
#20 CACHED

#21 [server stage-1 5/6] COPY app.js .
#21 CACHED

#22 [server stage-1 6/6] COPY views ./views
#22 CACHED

#23 [edge 1/2] FROM docker.io/library/caddy:2-alpine@sha256:5f5c8640aae01df9654968d946d8f1a56c497f1dd5c5cda4cf95ab7c14d58648
#23 resolve docker.io/library/caddy:2-alpine@sha256:5f5c8640aae01df9654968d946d8f1a56c497f1dd5c5cda4cf95ab7c14d58648 0.1s done
#23 DONE 0.1s

#24 [edge 2/2] COPY Caddyfile /etc/caddy/Caddyfile
#24 CACHED

#25 [edge] exporting to image
#25 exporting layers done
#25 exporting manifest sha256:6f210f15ed07e96fb74f9d8b48189c29ecff1488044a8da818fba160b96fb2f2 0.0s done
#25 exporting config sha256:badf4c570c6d598fd4178c7b6eeb09bd946a54dfa5b33cd676484b4fb6c58e5d 0.0s done
#25 exporting attestation manifest sha256:40604d3fd9d2f0e823f58a2521363435164cfd7c8c346819b54d090e241b905d 0.1s done
#25 exporting manifest list sha256:e5cd5dacc8ae27e9087c033d86f0742280f2919c60276ec9d69cf36e28463524
#25 exporting manifest list sha256:e5cd5dacc8ae27e9087c033d86f0742280f2919c60276ec9d69cf36e28463524 0.0s done
#25 naming to docker.io/library/httparena-fulmine-production-stack-edge:latest 0.0s done
#25 unpacking to docker.io/library/httparena-fulmine-production-stack-edge:latest 0.0s done
#25 DONE 0.3s

#26 [server] exporting to image
#26 exporting layers done
#26 exporting manifest sha256:19840a37bed444be0d3a72e4fd077f49ba27b3d3d8159b0ac189fe44901c38eb 0.0s done
#26 exporting config sha256:338e852cdedf117391077f9f6ce101c89a396f145629cba9c85e6ec879938ae0 0.0s done
#26 exporting attestation manifest sha256:9b2c43c194865208e721cff0ab3732aa1a1a18d84cad9b9e11129d1a13e5100f 0.1s done
#26 exporting manifest list sha256:63bb1d3485dec89d9c644256e2b0398619bb979be7e61b0729c7a71e5c3bdde1 0.0s done
#26 naming to docker.io/library/httparena-fulmine-production-stack-server:latest 0.0s done
#26 unpacking to docker.io/library/httparena-fulmine-production-stack-server:latest 0.0s done
#26 DONE 0.3s

#27 [authsvc internal] load metadata for docker.io/library/alpine:3.20
#27 DONE 0.9s

#5 [authsvc internal] load metadata for docker.io/library/rust:1-alpine
#5 DONE 0.9s

#28 [authsvc internal] load .dockerignore
#28 transferring context: 65B done
#28 DONE 0.0s

#29 [authsvc internal] load build context
#29 DONE 0.0s

#30 [authsvc build 1/7] FROM docker.io/library/rust:1-alpine@sha256:3c38f3f82c2f3d73da3b38e18d279393a04cb43ddded0e35088a8c3324d40900
#30 resolve docker.io/library/rust:1-alpine@sha256:3c38f3f82c2f3d73da3b38e18d279393a04cb43ddded0e35088a8c3324d40900 0.1s done
#30 DONE 0.1s

#31 [authsvc stage-1 1/3] FROM docker.io/library/alpine:3.20@sha256:d9e853e87e55526f6b2917df91a2115c36dd7c696a35be12163d44e6e2a4b6bc
#31 resolve docker.io/library/alpine:3.20@sha256:d9e853e87e55526f6b2917df91a2115c36dd7c696a35be12163d44e6e2a4b6bc 0.1s done
#31 DONE 0.1s

#29 [authsvc internal] load build context
#29 transferring context: 86B done
#29 DONE 0.0s

#32 [authsvc build 2/7] WORKDIR /build
#32 CACHED

#33 [authsvc build 7/7] RUN cargo build --release &&     strip target/release/authsvc
#33 CACHED

#34 [authsvc stage-1 2/3] RUN apk add --no-cache ca-certificates
#34 CACHED

#35 [authsvc build 3/7] RUN apk add --no-cache musl-dev pkgconfig
#35 CACHED

#36 [authsvc build 4/7] COPY Cargo.toml .
#36 CACHED

#37 [authsvc build 6/7] COPY src ./src
#37 CACHED

#38 [authsvc build 5/7] RUN mkdir src && echo 'fn main() {}' > src/main.rs &&     cargo build --release &&     rm -rf src target/release/deps/authsvc*
#38 CACHED

#39 [authsvc stage-1 3/3] COPY --from=build /build/target/release/authsvc /usr/local/bin/authsvc
#39 CACHED

#40 [edge] resolving provenance for metadata file
#40 DONE 0.0s

#41 [authsvc] exporting to image
#41 exporting layers done
#41 exporting manifest sha256:cbec56b40de0e4df46dcaf00dfeddc08b6437a1aba23b201263b36eb6244c33f 0.0s done
#41 exporting config sha256:7d2025dba1ada10e5e24f7fee7bdd851ed313cda33740d84faa8641fdee06f31 0.0s done
#41 exporting attestation manifest sha256:b78de5922f6a09c04c7076883148ddc0707aa6fdd3a1a0d695776be9f4e7729a
#41 exporting attestation manifest sha256:b78de5922f6a09c04c7076883148ddc0707aa6fdd3a1a0d695776be9f4e7729a 0.1s done
#41 exporting manifest list sha256:edaf6066eaff5b1065820320278857e0507200f50cc4576ae892c06f5e967bc3 0.0s done
#41 naming to docker.io/library/httparena-fulmine-production-stack-authsvc:latest done
#41 unpacking to docker.io/library/httparena-fulmine-production-stack-authsvc:latest done
#41 DONE 0.2s

#42 [server] resolving provenance for metadata file
#42 DONE 0.0s

#43 [authsvc] resolving provenance for metadata file
#43 DONE 0.0s
 Image httparena-fulmine-production-stack-authsvc Built 
 Image httparena-fulmine-production-stack-server Built 
 Image httparena-fulmine-production-stack-edge Built 
 Container httparena-fulmine-production-stack-cache-1 Creating 
 Container httparena-fulmine-production-stack-authsvc-1 Creating 
 Container httparena-fulmine-production-stack-authsvc-1 Created 
 Container httparena-fulmine-production-stack-cache-1 Created 
 Container httparena-fulmine-production-stack-server-1 Creating 
 Container httparena-fulmine-production-stack-server-1 Created 
 Container httparena-fulmine-production-stack-edge-1 Creating 
 Container httparena-fulmine-production-stack-edge-1 Created 
 Container httparena-fulmine-production-stack-cache-1 Starting 
 Container httparena-fulmine-production-stack-authsvc-1 Starting 
 Container httparena-fulmine-production-stack-cache-1 Started 
 Container httparena-fulmine-production-stack-server-1 Starting 
 Container httparena-fulmine-production-stack-authsvc-1 Started 
 Container httparena-fulmine-production-stack-server-1 Started 
 Container httparena-fulmine-production-stack-authsvc-1 Waiting 
 Container httparena-fulmine-production-stack-authsvc-1 Error dependency authsvc failed to start
dependency failed to start: container httparena-fulmine-production-stack-authsvc-1 exited (101)

─── httparena-fulmine-production-stack-edge-1 — status=created exit=0 oom=false error=
─── httparena-fulmine-production-stack-edge-1 — the container produced no output at all

─── httparena-fulmine-production-stack-server-1 — status=running exit=0 oom=false error=
─── httparena-fulmine-production-stack-server-1 — the container produced no output at all

─── httparena-fulmine-production-stack-cache-1 — status=exited exit=1 oom=false error=
─── httparena-fulmine-production-stack-cache-1 — last 120 log lines ───
  | 7:C 16 Aug 2026 12:34:07.935 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
  | 7:C 16 Aug 2026 12:34:07.935 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
  | 7:C 16 Aug 2026 12:34:07.935 * Redis version=7.4.8, bits=64, commit=00000000, modified=0, pid=7, just started
  | 7:C 16 Aug 2026 12:34:07.935 * Configuration loaded
  | 7:M 16 Aug 2026 12:34:07.935 * monotonic clock: POSIX clock_gettime
  | [redis] seeded from /seed.txt
  | 7:M 16 Aug 2026 12:34:07.936 * Running mode=standalone, port=6379.
  | 7:M 16 Aug 2026 12:34:07.936 # Warning: Could not create server TCP listening socket 0.0.0.0:6379: bind: Address in use
  | 7:M 16 Aug 2026 12:34:07.936 # Failed listening on port 6379 (tcp), aborting.
─── httparena-fulmine-production-stack-cache-1 — end of logs ───

─── httparena-fulmine-production-stack-authsvc-1 — status=exited exit=101 oom=false error=
─── httparena-fulmine-production-stack-authsvc-1 — last 120 log lines ───
  | 
  | thread 'main' (1) panicked at src/main.rs:59:29:
  | bind 0.0.0.0:9090: Address in use (os error 98)
  | note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
─── httparena-fulmine-production-stack-authsvc-1 — end of logs ───
[FAIL] gateway compose up failed
httparena-postgres
httparena-redis
[info] restoring loopback MTU to 65536

@MDA2AV
MDA2AV force-pushed the bump-fulmine-5.12 branch from 97771bc to 4623c14 Compare August 16, 2026 12:56
@MDA2AV
MDA2AV force-pushed the bump-fulmine-5.12 branch from 4623c14 to 6c8ea70 Compare August 16, 2026 13:05
@MDA2AV

MDA2AV commented Aug 16, 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: fulmine | Test: all tests

Test Conn RPS CPU Mem Δ RPS Δ Mem
baseline 512 1,296,532 6785.0% 2.6GiB -1.5% ~0%
baseline 4096 1,261,056 6619.1% 2.7GiB -2.4% ~0%
pipelined 512 30,973,238 6673.8% 2.1GiB -0.4% ~0%
pipelined 4096 30,942,425 6447.1% 2.1GiB +0.5% ~0%
limited-conn 512 1,074,575 6145.7% 2.6GiB -0.6% -3.7%
limited-conn 4096 1,157,763 6445.2% 2.7GiB -0.7% ~0%
json 4096 1,077,807 6437.8% 6.6GiB -2.1% -18.5%
json-comp 512 329,010 6198.3% 8.2GiB -0.6% -1.2%
json-comp 4096 329,263 6367.8% 8.6GiB -2.4% -4.4%
json-comp 16384 352,714 6323.9% 10.2GiB ~0% -1.9%
json-tls 4096 1,003,350 6508.0% 6.3GiB -2.9% -21.3%
upload 32 2,028 2885.0% 6.8GiB -0.6% +3.0%
upload 256 2,148 6306.0% 7.2GiB ~0% ~0%
api-4 256 35,121 384.8% 544MiB +4.8% +1.5%
api-16 1024 123,641 1531.4% 2.2GiB +0.9% +4.8%
static 1024 361,309 6565.6% 6.4GiB ~0% ~0%
static 4096 473,902 6591.4% 7.7GiB +0.5% ~0%
static 6800 518,153 6527.0% 7.6GiB +0.4% ~0%
static-tls 1024 311,316 6571.2% 6.4GiB -1.2% +1.6%
static-tls 4096 391,123 6463.1% 7.2GiB -1.0% -1.4%
static-tls 6800 413,085 6538.7% 6.3GiB -0.8% -14.9%
async-db 1024 227,626 5651.4% 4.3GiB ~0% ~0%
crud 4096 350,610 4669.4% 8.4GiB -1.9% +3.7%
fortunes 1024 68,039 6510.4% 4.3GiB ~0% ~0%
gateway-64 512 89,293 4360.2% 4.7GiB ~0% ~0%
gateway-64 1024 78,584 4058.6% 6.8GiB -1.8% +3.0%
gateway-h3 64 90,690 3503.6% 2.9GiB +0.2% ~0%
gateway-h3 256 62,266 2538.7% 4.3GiB +1.3% +4.9%
production-stack 256 58,708 4185.1% 3.2GiB -1.4% ~0%
production-stack 1024 50,551 4226.1% 4.6GiB +2.8% -13.2%
echo-ws 512 3,741,350 6406.7% 2.3GiB +0.4% -4.2%
echo-ws 4096 3,827,795 6337.3% 2.4GiB +0.7% ~0%
echo-ws 16384 3,626,401 6250.6% 2.5GiB +1.1% ~0%
echo-ws-pipeline 512 25,049,692 6816.9% 2.4GiB +0.6% ~0%
echo-ws-pipeline 4096 25,020,595 6598.9% 2.4GiB +0.2% ~0%
echo-ws-pipeline 16384 23,839,750 6367.2% 2.6GiB ~0% ~0%
echo-ws-limited 512 2,086,146 5560.0% 2.4GiB +0.1% ~0%
echo-ws-limited 4096 2,580,139 6229.2% 2.4GiB +0.6% ~0%
Full log
  WS upgrades: 16384
  WS frames:   116015952
  Latency samples: 116015952 / 116015952 responses (100.0%)
[info] CPU 6766.0% | Mem 2.6GiB

[run 3/3]
gcannon v0.5.3 [WS]
  Target:    localhost:8080/ws
  Threads:   64
  Conns:     16384 (256/thread)
  Pipeline:  16
  Req/conn:  unlimited (keep-alive)
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   11.31ms   11.00ms   13.20ms   17.50ms   22.00ms

  115037856 frames sent in 5.00s, 114775712 frames received
  Throughput: 22.95M req/s
  Bandwidth:  153.72MB/s
  WS upgrades: 16384
  WS frames:   114775712
  Latency samples: 114775712 / 114775712 responses (100.0%)
[info] CPU 6456.1% | Mem 2.6GiB

=== Best: 23839750 req/s (CPU: 6367.2%, Mem: 2.6GiB) ===
[info] saved results/echo-ws-pipeline/16384/fulmine.json
httparena-bench-fulmine
httparena-bench-fulmine

==============================================
=== fulmine / echo-ws-limited / 512c (tool=gcannon) ===
==============================================
[info] waiting for server...
[info] server ready

[run 1/3]
gcannon v0.5.3 [WS]
  Target:    localhost:8080/ws
  Threads:   64
  Conns:     512 (8/thread)
  Pipeline:  1
  Req/conn:  10
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency    145us    118us    255us    543us   1.72ms

  10413447 frames sent in 5.00s, 10413524 frames received
  Throughput: 2.08M req/s
  Bandwidth:  46.87MB/s
  WS upgrades: 1055834
  WS frames:   10413524
  Latency samples: 10413468 / 10413524 responses (100.0%)
  Reconnects: 1041384
[info] CPU 5484.3% | Mem 2.4GiB

[run 2/3]
gcannon v0.5.3 [WS]
  Target:    localhost:8080/ws
  Threads:   64
  Conns:     512 (8/thread)
  Pipeline:  1
  Req/conn:  10
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency    145us    118us    255us    536us   1.69ms

  10430668 frames sent in 5.00s, 10430731 frames received
  Throughput: 2.09M req/s
  Bandwidth:  46.94MB/s
  WS upgrades: 1057609
  WS frames:   10430731
  Latency samples: 10430697 / 10430731 responses (100.0%)
  Reconnects: 1043089
[info] CPU 5560.0% | Mem 2.4GiB

[run 3/3]
gcannon v0.5.3 [WS]
  Target:    localhost:8080/ws
  Threads:   64
  Conns:     512 (8/thread)
  Pipeline:  1
  Req/conn:  10
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency    144us    118us    255us    532us   1.35ms

  10400906 frames sent in 5.00s, 10400990 frames received
  Throughput: 2.08M req/s
  Bandwidth:  46.81MB/s
  WS upgrades: 1054296
  WS frames:   10400990
  Latency samples: 10400948 / 10400990 responses (100.0%)
  Reconnects: 1040139
[info] CPU 5463.6% | Mem 2.4GiB

=== Best: 2086146 req/s (CPU: 5560.0%, Mem: 2.4GiB) ===
[info] saved results/echo-ws-limited/512/fulmine.json
httparena-bench-fulmine
httparena-bench-fulmine

==============================================
=== fulmine / echo-ws-limited / 4096c (tool=gcannon) ===
==============================================
[info] waiting for server...
[info] server ready

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   1.05ms    856us   1.76ms   3.30ms   6.53ms

  12860970 frames sent in 5.00s, 12859004 frames received
  Throughput: 2.57M req/s
  Bandwidth:  57.93MB/s
  WS upgrades: 1289800
  WS frames:   12859004
  Latency samples: 12858970 / 12859004 responses (100.0%)
  Reconnects: 1284999
[info] CPU 5949.8% | Mem 2.4GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   1.05ms    894us   1.78ms   3.09ms   4.60ms

  12900287 frames sent in 5.00s, 12900697 frames received
  Throughput: 2.58M req/s
  Bandwidth:  58.07MB/s
  WS upgrades: 1297926
  WS frames:   12900697
  Latency samples: 12900642 / 12900697 responses (100.0%)
  Reconnects: 1290260
[info] CPU 6229.2% | Mem 2.4GiB

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


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   1.06ms    960us   1.72ms   2.91ms   4.45ms

  12869267 frames sent in 5.00s, 12870023 frames received
  Throughput: 2.57M req/s
  Bandwidth:  57.94MB/s
  WS upgrades: 1291738
  WS frames:   12870023
  Latency samples: 12869961 / 12870023 responses (100.0%)
  Reconnects: 1287632
[info] CPU 6005.4% | Mem 2.4GiB

=== Best: 2580139 req/s (CPU: 6229.2%, Mem: 2.4GiB) ===
[info] saved results/echo-ws-limited/4096/fulmine.json
httparena-bench-fulmine
httparena-bench-fulmine
[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/fulmine.json - 38 new, 38 total
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/current.json
[info] done
httparena-postgres
[info] restoring loopback MTU to 65536

@MDA2AV
MDA2AV marked this pull request as ready for review August 16, 2026 13:36
@MDA2AV
MDA2AV merged commit 7d855c2 into MDA2AV:main Aug 16, 2026
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