Skip to content

[Java] Quarkus: Switch to production recommended APIs and settings#240

Merged
MDA2AV merged 6 commits intoMDA2AV:mainfrom
Kaliumhexacyanoferrat:quarkus-api-update
Mar 29, 2026
Merged

[Java] Quarkus: Switch to production recommended APIs and settings#240
MDA2AV merged 6 commits intoMDA2AV:mainfrom
Kaliumhexacyanoferrat:quarkus-api-update

Conversation

@Kaliumhexacyanoferrat
Copy link
Copy Markdown
Collaborator

No description provided.

@Kaliumhexacyanoferrat Kaliumhexacyanoferrat self-assigned this Mar 29, 2026
@Kaliumhexacyanoferrat
Copy link
Copy Markdown
Collaborator Author

@BennyFranciscus any idea why the /upload call is failing? Is this a new validation so this never passed in the first place? any changes in the settings that may have caused this?

@BennyFranciscus
Copy link
Copy Markdown
Collaborator

@Kaliumhexacyanoferrat The upload failure is from the max-body-size change in application.properties:

-quarkus.http.limits.max-body-size=25M
+quarkus.http.limits.max-body-size=25

That dropped it from 25 megabytes to 25 bytes. The small body test passes because it fits under 25 bytes, but the random body test sends 48 bytes and gets rejected/truncated → empty response.

Should be a quick fix — just add the M back: quarkus.http.limits.max-body-size=25M

Everything else in the PR looks clean — nice modernization of the endpoint signatures and the StaticHandler approach is definitely the production-recommended way.

@BennyFranciscus
Copy link
Copy Markdown
Collaborator

@Kaliumhexacyanoferrat Nice, the max-body-size=25M fix looks good 👍 Upload should pass now.

@Kaliumhexacyanoferrat
Copy link
Copy Markdown
Collaborator Author

/benchmark

@github-actions
Copy link
Copy Markdown

🚀 Benchmark run triggered for quarkus-jvm (all profiles). Results will be posted here when done.

@github-actions
Copy link
Copy Markdown

Benchmark Results

Framework: quarkus-jvm | Profile: all profiles

quarkus-jvm / baseline / 512c (p=1, r=0, cpu=64)
  Best: 1735866 req/s (CPU: 6533.6%, Mem: 3.5GiB) ===

quarkus-jvm / baseline / 4096c (p=1, r=0, cpu=64)
  Best: 1841151 req/s (CPU: 6355.0%, Mem: 6.6GiB) ===

quarkus-jvm / baseline / 16384c (p=1, r=0, cpu=64)
  Best: 1715866 req/s (CPU: 6243.1%, Mem: 10.4GiB) ===

quarkus-jvm / pipelined / 512c (p=16, r=0, cpu=unlimited)
  Best: 11311017 req/s (CPU: 9949.9%, Mem: 10.1GiB) ===

quarkus-jvm / pipelined / 4096c (p=16, r=0, cpu=unlimited)
  Best: 11640966 req/s (CPU: 9727.7%, Mem: 10.0GiB) ===

quarkus-jvm / pipelined / 16384c (p=16, r=0, cpu=unlimited)
  Best: 10860193 req/s (CPU: 9393.4%, Mem: 10.6GiB) ===

quarkus-jvm / limited-conn / 512c (p=1, r=10, cpu=unlimited)
  Best: 544978 req/s (CPU: 3243.0%, Mem: 2.3GiB) ===

quarkus-jvm / limited-conn / 4096c (p=1, r=10, cpu=unlimited)
  Best: 544251 req/s (CPU: 3322.6%, Mem: 2.4GiB) ===

quarkus-jvm / json / 4096c (p=1, r=0, cpu=unlimited)
  Best: 511658 req/s (CPU: 10066.2%, Mem: 10.0GiB) ===

quarkus-jvm / json / 16384c (p=1, r=0, cpu=unlimited)
  Best: 497777 req/s (CPU: 9660.4%, Mem: 10.6GiB) ===

quarkus-jvm / upload / 64c (p=1, r=0, cpu=unlimited)
  Best: 856 req/s (CPU: 7580.5%, Mem: 10.2GiB) ===

quarkus-jvm / upload / 256c (p=1, r=0, cpu=unlimited)
  Best: 692 req/s (CPU: 8104.0%, Mem: 10.5GiB) ===

quarkus-jvm / upload / 512c (p=1, r=0, cpu=unlimited)
  Best: 643 req/s (CPU: 7349.0%, Mem: 10.6GiB) ===

quarkus-jvm / compression / 4096c (p=1, r=0, cpu=unlimited)
  Best: 10331 req/s (CPU: 11835.0%, Mem: 11.2GiB) ===

quarkus-jvm / compression / 16384c (p=1, r=0, cpu=unlimited)
  Best: 10207 req/s (CPU: 11908.6%, Mem: 11.4GiB) ===

quarkus-jvm / noisy / 512c (p=1, r=0, cpu=unlimited)
  Best: 1339660 req/s (CPU: 7171.8%, Mem: 8.3GiB) ===

quarkus-jvm / noisy / 4096c (p=1, r=0, cpu=unlimited)
  Best: 1763217 req/s (CPU: 8026.5%, Mem: 8.3GiB) ===

quarkus-jvm / noisy / 16384c (p=1, r=0, cpu=unlimited)
  Best: 1557710 req/s (CPU: 8211.3%, Mem: 10.5GiB) ===

quarkus-jvm / mixed / 4096c (p=1, r=5, cpu=unlimited)
  Best: 35489 req/s (CPU: 10104.1%, Mem: 12.2GiB) ===

quarkus-jvm / mixed / 16384c (p=1, r=5, cpu=unlimited)
  Best: 40271 req/s (CPU: 8567.8%, Mem: 20.8GiB) ===

quarkus-jvm / static / 4096c (p=1, r=0, cpu=unlimited)
  Best: 386068 req/s (CPU: 6324.9%, Mem: 2.6GiB) ===

quarkus-jvm / static / 16384c (p=1, r=0, cpu=unlimited)
  Best: 354847 req/s (CPU: 6205.1%, Mem: 8.8GiB) ===

quarkus-jvm / async-db / 512c (p=1, r=0, cpu=unlimited)
  Best: 105833 req/s (CPU: 4647.9%, Mem: 10.3GiB) ===

quarkus-jvm / async-db / 1024c (p=1, r=0, cpu=unlimited)
  Best: 105620 req/s (CPU: 4681.5%, Mem: 10.0GiB) ===

quarkus-jvm / baseline-h2 / 256c (p=1, r=0, cpu=unlimited)
  Best: 5929940 req/s (CPU: 9862.1%, Mem: 10.5GiB) ===

quarkus-jvm / baseline-h2 / 1024c (p=1, r=0, cpu=unlimited)
  Best: 5571740 req/s (CPU: 9562.4%, Mem: 10.5GiB) ===

quarkus-jvm / static-h2 / 256c (p=1, r=0, cpu=unlimited)
  Best: 174564 req/s (CPU: 8132.9%, Mem: 11.2GiB) ===

quarkus-jvm / static-h2 / 1024c (p=1, r=0, cpu=unlimited)
  Best: 118369 req/s (CPU: 6994.3%, Mem: 16.3GiB) ===
Full log
Main benchmark duration is over for thread #42Main benchmark duration is over for thread #. Stopping all clients.82Main benchmark duration is over for thread #46. Stopping all clients.

. Stopping all clients.8833Stopped all clients for thread #77. Stopping all clients.
46Main benchmark duration is over for thread #Stopped all clients for thread #32
. Stopping all clients.Stopped all clients for thread #
65. Stopping all clients.

. Stopping all clients.. Stopping all clients.
36. Stopping all clients.. Stopping all clients.Main benchmark duration is over for thread #
Stopped all clients for thread #65
Stopped all clients for thread #Main benchmark duration is over for thread #Main benchmark duration is over for thread #53. Stopping all clients.
Main benchmark duration is over for thread #Main benchmark duration is over for thread #100Stopped all clients for thread #

. Stopping all clients.

Main benchmark duration is over for thread #618834Stopped all clients for thread #. Stopping all clients.


5339Main benchmark duration is over for thread #Main benchmark duration is over for thread #
Main benchmark duration is over for thread #Main benchmark duration is over for thread #49
Stopped all clients for thread #82Stopped all clients for thread #118. Stopping all clients.63. Stopping all clients.
Stopped all clients for thread #Main benchmark duration is over for thread #Stopped all clients for thread #Main benchmark duration is over for thread #Main benchmark duration is over for thread #
61. Stopping all clients.73Stopped all clients for thread #101Main benchmark duration is over for thread #
Main benchmark duration is over for thread #Main benchmark duration is over for thread #Stopped all clients for thread #103. Stopping all clients.

849. Stopping all clients.Main benchmark duration is over for thread #
63Main benchmark duration is over for thread #944710Main benchmark duration is over for thread #. Stopping all clients.69

. Stopping all clients.Stopped all clients for thread #Stopped all clients for thread #Main benchmark duration is over for thread #15Stopped all clients for thread #. Stopping all clients.Main benchmark duration is over for thread #
. Stopping all clients.. Stopping all clients.. Stopping all clients.Main benchmark duration is over for thread #Main benchmark duration is over for thread #439
36975724
. Stopping all clients.. Stopping all clients.76
85Main benchmark duration is over for thread #
Stopped all clients for thread #


81Stopped all clients for thread #
Stopped all clients for thread #Stopped all clients for thread #. Stopping all clients.Stopped all clients for thread #2949
10569


. Stopping all clients.100Stopped all clients for thread #94
Stopped all clients for thread #
Main benchmark duration is over for thread #10
Main benchmark duration is over for thread #25117. Stopping all clients.
Stopped all clients for thread #Main benchmark duration is over for thread #
33Stopped all clients for thread #Main benchmark duration is over for thread #113. Stopping all clients.


4215. Stopping all clients.Stopped all clients for thread #113
. Stopping all clients.. Stopping all clients.
. Stopping all clients.


Main benchmark duration is over for thread #
7368
. Stopping all clients.Stopped all clients for thread #
81
Stopped all clients for thread #Stopped all clients for thread #
285Main benchmark duration is over for thread #. Stopping all clients.47126. Stopping all clients.


Stopped all clients for thread #68
. Stopping all clients.

. Stopping all clients.

Main benchmark duration is over for thread #Main benchmark duration is over for thread #
90. Stopping all clients.
18Stopped all clients for thread #24
Stopped all clients for thread #
Stopped all clients for thread #Main benchmark duration is over for thread #Main benchmark duration is over for thread #3. Stopping all clients.
31Stopped all clients for thread #. Stopping all clients.
2101Stopped all clients for thread #3
Stopped all clients for thread #Stopped all clients for thread #. Stopping all clients.25Stopped all clients for thread #

Stopped all clients for thread #
43
126
Stopped all clients for thread #
Stopped all clients for thread #18
Stopped all clients for thread #76
39
Main benchmark duration is over for thread #116. Stopping all clients.
Main benchmark duration is over for thread #60. Stopping all clients.
Stopped all clients for thread #116
Main benchmark duration is over for thread #62. Stopping all clients.
Stopped all clients for thread #60
Stopped all clients for thread #62
Main benchmark duration is over for thread #38. Stopping all clients.
Stopped all clients for thread #38
Main benchmark duration is over for thread #75. Stopping all clients.
Stopped all clients for thread #75
31
Main benchmark duration is over for thread #4. Stopping all clients.
Stopped all clients for thread #117
Stopped all clients for thread #4
Stopped all clients for thread #103
Main benchmark duration is over for thread #96. Stopping all clients.
Main benchmark duration is over for thread #79. Stopping all clients.
Stopped all clients for thread #96
Stopped all clients for thread #79
Stopped all clients for thread #57
44. Stopping all clients.
Stopped all clients for thread #44
Main benchmark duration is over for thread #120. Stopping all clients.
Stopped all clients for thread #120
0
Stopped all clients for thread #97
Stopped all clients for thread #118
77
Main benchmark duration is over for thread #86. Stopping all clients.
Stopped all clients for thread #86
90
Main benchmark duration is over for thread #80. Stopping all clients.
Stopped all clients for thread #80
Main benchmark duration is over for thread #112. Stopping all clients.
Main benchmark duration is over for thread #Stopped all clients for thread #106112
Main benchmark duration is over for thread #104. Stopping all clients.
Main benchmark duration is over for thread #66. Stopping all clients.
Stopped all clients for thread #104
Stopped all clients for thread #66
Main benchmark duration is over for thread #19. Stopping all clients.
Stopped all clients for thread #19
Main benchmark duration is over for thread #102. Stopping all clients.
Stopped all clients for thread #102
Main benchmark duration is over for thread #54. Stopping all clients.
Stopped all clients for thread #54
Main benchmark duration is over for thread #21. Stopping all clients.
Stopped all clients for thread #21
Main benchmark duration is over for thread #23. Stopping all clients.
Stopped all clients for thread #23
Main benchmark duration is over for thread #30. Stopping all clients.
Stopped all clients for thread #30
Main benchmark duration is over for thread #71. Stopping all clients.
Stopped all clients for thread #71
Main benchmark duration is over for thread #40. Stopping all clients.
Stopped all clients for thread #40
Main benchmark duration is over for thread #78. Stopping all clients.
Stopped all clients for thread #78
Main benchmark duration is over for thread #45. Stopping all clients.
Main benchmark duration is over for thread #119. Stopping all clients.
Main benchmark duration is over for thread #93. Stopping all clients.
Stopped all clients for thread #45
Stopped all clients for thread #119
Stopped all clients for thread #93
Main benchmark duration is over for thread #95. Stopping all clients.
Stopped all clients for thread #95
Main benchmark duration is over for thread #108. Stopping all clients.
Stopped all clients for thread #108
Main benchmark duration is over for thread #12. Stopping all clients.
Stopped all clients for thread #12
Main benchmark duration is over for thread #1. Stopping all clients.
Main benchmark duration is over for thread #Stopped all clients for thread #1
92Main benchmark duration is over for thread #41. Stopping all clients.. Stopping all clients.

Stopped all clients for thread #41
Main benchmark duration is over for thread #35. Stopping all clients.
Stopped all clients for thread #35
Main benchmark duration is over for thread #Stopped all clients for thread #12192
. Stopping all clients.. Stopping all clients.
Stopped all clients for thread #106
Main benchmark duration is over for thread #58. Stopping all clients.
Stopped all clients for thread #58
Main benchmark duration is over for thread #87. Stopping all clients.
Stopped all clients for thread #87
Main benchmark duration is over for thread #91. Stopping all clients.
Stopped all clients for thread #91

Stopped all clients for thread #121
Main benchmark duration is over for thread #115. Stopping all clients.
Stopped all clients for thread #115
Main benchmark duration is over for thread #50. Stopping all clients.
Stopped all clients for thread #50
Main benchmark duration is over for thread #64. Stopping all clients.
Stopped all clients for thread #64

finished in 5.07s, 114993.20 req/s, 1.77GB/s
requests: 574966 total, 677366 started, 574966 done, 574966 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 639768 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 8.86GB (9513030966) total, 5.36MB (5624128) headers (space savings 96.04%), 8.83GB (9479807768) data
                     min         max         mean         sd        +/- sd
time for request:     5.70ms       3.10s    784.87ms    380.33ms    78.86%
time for connect:     7.63ms    162.29ms     74.43ms     42.60ms    58.40%
time to 1st byte:    51.92ms       1.08s    523.61ms    251.16ms    70.51%
req/s           :      80.38      160.78      112.26       11.82    73.83%
  CPU: 7236.8% | Mem: 21.0GiB

=== Best: 118369 req/s (CPU: 6994.3%, Mem: 16.3GiB) ===
[dry-run] Results not saved (use --save to persist)
httparena-bench-quarkus-jvm
httparena-bench-quarkus-jvm
[skip] quarkus-jvm does not subscribe to baseline-h3
[skip] quarkus-jvm does not subscribe to static-h3
[skip] quarkus-jvm does not subscribe to unary-grpc
[skip] quarkus-jvm does not subscribe to unary-grpc-tls
[skip] quarkus-jvm does not subscribe to echo-ws
httparena-postgres
httparena-postgres
[restore] Restoring CPU governor to performance...

@BennyFranciscus
Copy link
Copy Markdown
Collaborator

@Kaliumhexacyanoferrat Upload is passing now — 856 req/s at 64c, looks healthy 👍

The numbers across the board look really solid. 1.84M req/s baseline at 4096c, and those pipelined results at 11.6M req/s are impressive. The production settings are clearly doing their job.

One thing that stands out — the H2 baseline at ~5.9M req/s is really strong for a JVM framework. Quarkus's Vert.x layer is doing great work there.

I'll review the PR changes and merge once everything checks out.

@Kaliumhexacyanoferrat Kaliumhexacyanoferrat marked this pull request as ready for review March 29, 2026 10:34
@MDA2AV MDA2AV merged commit 15f42e2 into MDA2AV:main Mar 29, 2026
2 checks passed
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.

3 participants