Skip to content

Add throughput benchmark for petclinic load testing#11098

Closed
bm1549 wants to merge 3 commits into
masterfrom
worktree-brian.marks+memory-benchmark
Closed

Add throughput benchmark for petclinic load testing#11098
bm1549 wants to merge 3 commits into
masterfrom
worktree-brian.marks+memory-benchmark

Conversation

@bm1549
Copy link
Copy Markdown
Contributor

@bm1549 bm1549 commented Apr 13, 2026

What Does This Do

Adds a new throughput benchmark under benchmark/throughput/petclinic/ that measures tracer throughput overhead under load at varying heap sizes using spring-petclinic 3.3.0-SNAPSHOT and JMeter.

Motivation

Automates the manual process of running petclinic at various heap sizes (256m → 64m) with and without the agent, measuring stabilized throughput, and comparing the delta.

The script:

  • Auto-downloads JMeter 5.6.3 and builds spring-petclinic 3.3.0-SNAPSHOT (pinned to commit 7034d17)
  • Iterates over configurable heap sizes (default: 256/192/128/96/80/64 MiB)
  • For each heap size: starts petclinic, runs JMeter (8 threads, GET /owners/3), captures throughput from the measurement window (discarding warmup)
  • Detects OOM (server crash during load)
  • Outputs a comparison table with throughput deltas and saves CSV + per-run JTL files

Example output from a local run (Zulu 17, Apple Silicon):

Heap      Baseline        Candidate       Delta         
------    -----------     -----------     -----------   
256m      17712 req/s     12549 req/s     -29.1%
192m      19649 req/s     13154 req/s     -33.1%
128m      19111 req/s     10769 req/s     -43.6%
96m       13575 req/s     9122 req/s      -32.8%
80m       12875 req/s     8451 req/s      -34.4%
64m       10258 req/s     6162 req/s      -39.9%

Differences from the original manual benchmark

  • Fixed duration vs run-until-stable: The original benchmark runs JMeter indefinitely until throughput stabilizes, then manually records the number. This script uses a fixed warmup + measurement window (default 30s + 60s). This is simpler to automate but may not fully capture stabilization, especially at lower heap sizes where GC behavior is more variable.
  • Same-machine load generation: The original runs JMeter separately from petclinic. This script runs both on the same machine, which means JMeter and petclinic compete for CPU/memory. This inflates overhead percentages compared to the original results.
  • No CPU pinning: The original uses taskset to pin server processes to specific cores. This script does not pin, so results are noisier due to scheduling jitter.
  • Two variants only: The original tests no-agent vs multiple tracer versions side-by-side. This script compares no-agent vs a single candidate agent jar. To compare multiple versions, run the script multiple times with --skip-baseline and different --agent paths.
  • H2 database: Both use the embedded H2 database (not an external Postgres), though an external DB would be more realistic.

Additional Notes

  • Supports --jfr flag for JFR profiling during measurement
  • Supports --skip-baseline for comparing multiple candidate builds without re-running baseline
  • Supports --agent-opts for testing with specific features disabled
  • tools/ and results/ directories are gitignored

tag: ai generated

Contributor Checklist

🤖 Generated with Claude Code

Adds a new benchmark category under benchmark/memory/petclinic/ that measures
tracer throughput overhead across decreasing heap sizes using spring-petclinic
3.3.0 and JMeter. Based on Doug's methodology for evaluating memory overhead
of the Java tracer agent.

The script auto-downloads JMeter and builds petclinic, iterates over
configurable heap sizes (default: 256/192/128/96/80/64 MiB), runs each with
and without the agent, and outputs a comparison table with throughput delta.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@bm1549 bm1549 added the tag: no release notes Changes to exclude from release notes label Apr 13, 2026
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@dougqh
Copy link
Copy Markdown
Contributor

dougqh commented Apr 13, 2026

I think it is more important to see the difference of dd-java-agent with and without the change. Is that something we can add?

@pr-commenter
Copy link
Copy Markdown

pr-commenter Bot commented Apr 13, 2026

Benchmarks

⚠️ Warning: Baseline build not found for merge-base commit. Comparing against the latest commit on master instead.

Startup

Parameters

Baseline Candidate
baseline_or_candidate baseline candidate
git_branch master worktree-brian.marks+memory-benchmark
git_commit_date 1776101218 1776108463
git_commit_sha 140eee9 f8fc1df
release_version 1.62.0-SNAPSHOT~140eee9add 1.62.0-SNAPSHOT~f8fc1df1dd
See matching parameters
Baseline Candidate
application insecure-bank insecure-bank
ci_job_date 1776110184 1776110184
ci_job_id 1591250291 1591250291
ci_pipeline_id 107457101 107457101
cpu_model Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz
kernel_version Linux runner-zfyrx7zua-project-304-concurrent-0-zbu1ksmy 6.8.0-1031-aws #33~22.04.1-Ubuntu SMP Thu Jun 26 14:22:30 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux Linux runner-zfyrx7zua-project-304-concurrent-0-zbu1ksmy 6.8.0-1031-aws #33~22.04.1-Ubuntu SMP Thu Jun 26 14:22:30 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
module Agent Agent
parent None None

Summary

Found 0 performance improvements and 0 performance regressions! Performance is the same for 59 metrics, 12 unstable metrics.

Startup time reports for insecure-bank
gantt
    title insecure-bank - global startup overhead: candidate=1.62.0-SNAPSHOT~f8fc1df1dd, baseline=1.62.0-SNAPSHOT~140eee9add

    dateFormat X
    axisFormat %s
section tracing
Agent [baseline] (1.059 s) : 0, 1058565
Total [baseline] (8.841 s) : 0, 8841421
Agent [candidate] (1.063 s) : 0, 1062830
Total [candidate] (8.861 s) : 0, 8861391
section iast
Agent [baseline] (1.222 s) : 0, 1221718
Total [baseline] (9.587 s) : 0, 9587037
Agent [candidate] (1.222 s) : 0, 1221562
Total [candidate] (9.573 s) : 0, 9573381
Loading
  • baseline results
Module Variant Duration Δ tracing
Agent tracing 1.059 s -
Agent iast 1.222 s 163.153 ms (15.4%)
Total tracing 8.841 s -
Total iast 9.587 s 745.617 ms (8.4%)
  • candidate results
Module Variant Duration Δ tracing
Agent tracing 1.063 s -
Agent iast 1.222 s 158.732 ms (14.9%)
Total tracing 8.861 s -
Total iast 9.573 s 711.99 ms (8.0%)
gantt
    title insecure-bank - break down per module: candidate=1.62.0-SNAPSHOT~f8fc1df1dd, baseline=1.62.0-SNAPSHOT~140eee9add

    dateFormat X
    axisFormat %s
section tracing
crashtracking [baseline] (1.236 ms) : 0, 1236
crashtracking [candidate] (1.24 ms) : 0, 1240
BytebuddyAgent [baseline] (632.428 ms) : 0, 632428
BytebuddyAgent [candidate] (637.12 ms) : 0, 637120
AgentMeter [baseline] (29.45 ms) : 0, 29450
AgentMeter [candidate] (29.717 ms) : 0, 29717
GlobalTracer [baseline] (249.268 ms) : 0, 249268
GlobalTracer [candidate] (250.218 ms) : 0, 250218
AppSec [baseline] (32.187 ms) : 0, 32187
AppSec [candidate] (32.32 ms) : 0, 32320
Debugger [baseline] (59.334 ms) : 0, 59334
Debugger [candidate] (59.364 ms) : 0, 59364
Remote Config [baseline] (605.919 µs) : 0, 606
Remote Config [candidate] (956.552 µs) : 0, 957
Telemetry [baseline] (8.092 ms) : 0, 8092
Telemetry [candidate] (8.09 ms) : 0, 8090
Flare Poller [baseline] (9.811 ms) : 0, 9811
Flare Poller [candidate] (7.48 ms) : 0, 7480
section iast
crashtracking [baseline] (1.238 ms) : 0, 1238
crashtracking [candidate] (1.227 ms) : 0, 1227
BytebuddyAgent [baseline] (799.44 ms) : 0, 799440
BytebuddyAgent [candidate] (799.159 ms) : 0, 799159
AgentMeter [baseline] (11.365 ms) : 0, 11365
AgentMeter [candidate] (11.355 ms) : 0, 11355
GlobalTracer [baseline] (238.61 ms) : 0, 238610
GlobalTracer [candidate] (238.92 ms) : 0, 238920
AppSec [baseline] (30.187 ms) : 0, 30187
AppSec [candidate] (28.69 ms) : 0, 28690
Debugger [baseline] (61.955 ms) : 0, 61955
Debugger [candidate] (63.231 ms) : 0, 63231
Remote Config [baseline] (536.609 µs) : 0, 537
Remote Config [candidate] (1.136 ms) : 0, 1136
Telemetry [baseline] (12.602 ms) : 0, 12602
Telemetry [candidate] (12.226 ms) : 0, 12226
Flare Poller [baseline] (3.592 ms) : 0, 3592
Flare Poller [candidate] (3.391 ms) : 0, 3391
IAST [baseline] (25.788 ms) : 0, 25788
IAST [candidate] (25.904 ms) : 0, 25904
Loading
Startup time reports for petclinic
gantt
    title petclinic - global startup overhead: candidate=1.62.0-SNAPSHOT~f8fc1df1dd, baseline=1.62.0-SNAPSHOT~140eee9add

    dateFormat X
    axisFormat %s
section tracing
Agent [baseline] (1.065 s) : 0, 1064885
Total [baseline] (11.048 s) : 0, 11048054
Agent [candidate] (1.054 s) : 0, 1053681
Total [candidate] (11.068 s) : 0, 11067791
section appsec
Agent [baseline] (1.257 s) : 0, 1257289
Total [baseline] (11.132 s) : 0, 11131814
Agent [candidate] (1.253 s) : 0, 1253073
Total [candidate] (11.105 s) : 0, 11104869
section iast
Agent [baseline] (1.224 s) : 0, 1224324
Total [baseline] (11.307 s) : 0, 11307190
Agent [candidate] (1.226 s) : 0, 1225748
Total [candidate] (11.338 s) : 0, 11338057
section profiling
Agent [baseline] (1.186 s) : 0, 1185927
Total [baseline] (11.006 s) : 0, 11005533
Agent [candidate] (1.186 s) : 0, 1185906
Total [candidate] (11.073 s) : 0, 11073065
Loading
  • baseline results
Module Variant Duration Δ tracing
Agent tracing 1.065 s -
Agent appsec 1.257 s 192.404 ms (18.1%)
Agent iast 1.224 s 159.439 ms (15.0%)
Agent profiling 1.186 s 121.041 ms (11.4%)
Total tracing 11.048 s -
Total appsec 11.132 s 83.761 ms (0.8%)
Total iast 11.307 s 259.137 ms (2.3%)
Total profiling 11.006 s -42.521 ms (-0.4%)
  • candidate results
Module Variant Duration Δ tracing
Agent tracing 1.054 s -
Agent appsec 1.253 s 199.392 ms (18.9%)
Agent iast 1.226 s 172.067 ms (16.3%)
Agent profiling 1.186 s 132.224 ms (12.5%)
Total tracing 11.068 s -
Total appsec 11.105 s 37.078 ms (0.3%)
Total iast 11.338 s 270.266 ms (2.4%)
Total profiling 11.073 s 5.274 ms (0.0%)
gantt
    title petclinic - break down per module: candidate=1.62.0-SNAPSHOT~f8fc1df1dd, baseline=1.62.0-SNAPSHOT~140eee9add

    dateFormat X
    axisFormat %s
section tracing
crashtracking [baseline] (1.255 ms) : 0, 1255
crashtracking [candidate] (1.226 ms) : 0, 1226
BytebuddyAgent [baseline] (637.272 ms) : 0, 637272
BytebuddyAgent [candidate] (631.021 ms) : 0, 631021
AgentMeter [baseline] (29.659 ms) : 0, 29659
AgentMeter [candidate] (29.481 ms) : 0, 29481
GlobalTracer [baseline] (250.117 ms) : 0, 250117
GlobalTracer [candidate] (248.703 ms) : 0, 248703
AppSec [baseline] (32.199 ms) : 0, 32199
AppSec [candidate] (31.997 ms) : 0, 31997
Debugger [baseline] (60.371 ms) : 0, 60371
Debugger [candidate] (59.906 ms) : 0, 59906
Remote Config [baseline] (600.001 µs) : 0, 600
Remote Config [candidate] (591.612 µs) : 0, 592
Telemetry [baseline] (8.126 ms) : 0, 8126
Telemetry [candidate] (8.026 ms) : 0, 8026
Flare Poller [baseline] (8.994 ms) : 0, 8994
Flare Poller [candidate] (6.64 ms) : 0, 6640
section appsec
crashtracking [baseline] (1.226 ms) : 0, 1226
crashtracking [candidate] (1.215 ms) : 0, 1215
BytebuddyAgent [baseline] (666.632 ms) : 0, 666632
BytebuddyAgent [candidate] (664.449 ms) : 0, 664449
AgentMeter [baseline] (12.193 ms) : 0, 12193
AgentMeter [candidate] (12.153 ms) : 0, 12153
GlobalTracer [baseline] (250.981 ms) : 0, 250981
GlobalTracer [candidate] (250.272 ms) : 0, 250272
AppSec [baseline] (185.751 ms) : 0, 185751
AppSec [candidate] (184.887 ms) : 0, 184887
Debugger [baseline] (66.249 ms) : 0, 66249
Debugger [candidate] (66.32 ms) : 0, 66320
Remote Config [baseline] (604.934 µs) : 0, 605
Remote Config [candidate] (592.358 µs) : 0, 592
Telemetry [baseline] (8.774 ms) : 0, 8774
Telemetry [candidate] (8.618 ms) : 0, 8618
Flare Poller [baseline] (3.641 ms) : 0, 3641
Flare Poller [candidate] (3.562 ms) : 0, 3562
IAST [baseline] (24.774 ms) : 0, 24774
IAST [candidate] (24.548 ms) : 0, 24548
section iast
crashtracking [baseline] (1.223 ms) : 0, 1223
crashtracking [candidate] (1.234 ms) : 0, 1234
BytebuddyAgent [baseline] (800.598 ms) : 0, 800598
BytebuddyAgent [candidate] (802.862 ms) : 0, 802862
AgentMeter [baseline] (11.424 ms) : 0, 11424
AgentMeter [candidate] (11.428 ms) : 0, 11428
GlobalTracer [baseline] (239.382 ms) : 0, 239382
GlobalTracer [candidate] (239.22 ms) : 0, 239220
AppSec [baseline] (32.64 ms) : 0, 32640
AppSec [candidate] (31.648 ms) : 0, 31648
Debugger [baseline] (59.153 ms) : 0, 59153
Debugger [candidate] (59.824 ms) : 0, 59824
Remote Config [baseline] (532.634 µs) : 0, 533
Remote Config [candidate] (1.096 ms) : 0, 1096
Telemetry [baseline] (13.624 ms) : 0, 13624
Telemetry [candidate] (12.846 ms) : 0, 12846
Flare Poller [baseline] (3.487 ms) : 0, 3487
Flare Poller [candidate] (3.469 ms) : 0, 3469
IAST [baseline] (25.871 ms) : 0, 25871
IAST [candidate] (25.758 ms) : 0, 25758
section profiling
crashtracking [baseline] (1.184 ms) : 0, 1184
crashtracking [candidate] (1.195 ms) : 0, 1195
BytebuddyAgent [baseline] (692.08 ms) : 0, 692080
BytebuddyAgent [candidate] (693.371 ms) : 0, 693371
AgentMeter [baseline] (9.161 ms) : 0, 9161
AgentMeter [candidate] (9.084 ms) : 0, 9084
GlobalTracer [baseline] (207.527 ms) : 0, 207527
GlobalTracer [candidate] (207.129 ms) : 0, 207129
AppSec [baseline] (32.598 ms) : 0, 32598
AppSec [candidate] (32.472 ms) : 0, 32472
Debugger [baseline] (65.648 ms) : 0, 65648
Debugger [candidate] (65.3 ms) : 0, 65300
Remote Config [baseline] (582.152 µs) : 0, 582
Remote Config [candidate] (564.828 µs) : 0, 565
Telemetry [baseline] (7.838 ms) : 0, 7838
Telemetry [candidate] (7.8 ms) : 0, 7800
Flare Poller [baseline] (3.537 ms) : 0, 3537
Flare Poller [candidate] (3.587 ms) : 0, 3587
ProfilingAgent [baseline] (94.124 ms) : 0, 94124
ProfilingAgent [candidate] (93.732 ms) : 0, 93732
Profiling [baseline] (94.684 ms) : 0, 94684
Profiling [candidate] (94.287 ms) : 0, 94287
Loading

Load

Parameters

Baseline Candidate
baseline_or_candidate baseline candidate
git_branch master worktree-brian.marks+memory-benchmark
git_commit_date 1776101218 1776108463
git_commit_sha 140eee9 f8fc1df
release_version 1.62.0-SNAPSHOT~140eee9add 1.62.0-SNAPSHOT~f8fc1df1dd
See matching parameters
Baseline Candidate
application insecure-bank insecure-bank
ci_job_date 1776110750 1776110750
ci_job_id 1591250294 1591250294
ci_pipeline_id 107457101 107457101
cpu_model Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz
kernel_version Linux runner-zfyrx7zua-project-304-concurrent-1-2u7jtu81 6.8.0-1031-aws #33~22.04.1-Ubuntu SMP Thu Jun 26 14:22:30 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux Linux runner-zfyrx7zua-project-304-concurrent-1-2u7jtu81 6.8.0-1031-aws #33~22.04.1-Ubuntu SMP Thu Jun 26 14:22:30 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux

Summary

Found 2 performance improvements and 0 performance regressions! Performance is the same for 18 metrics, 16 unstable metrics.

scenario Δ mean agg_http_req_duration_p50 Δ mean agg_http_req_duration_p95 Δ mean throughput candidate mean agg_http_req_duration_p50 candidate mean agg_http_req_duration_p95 candidate mean throughput baseline mean agg_http_req_duration_p50 baseline mean agg_http_req_duration_p95 baseline mean throughput
scenario:load:insecure-bank:profiling:high_load better
[-255.038µs; -105.814µs] or [-13.643%; -5.661%]
unstable
[-1463.279µs; -444.837µs] or [-25.111%; -7.634%]
unstable
[+48.667op/s; +529.583op/s] or [+2.593%; +28.222%]
1.689ms 4.873ms 2165.625op/s 1.869ms 5.827ms 1876.500op/s
scenario:load:petclinic:appsec:high_load better
[-1.790ms; -0.570ms] or [-8.935%; -2.845%]
unsure
[-2.299ms; -0.495ms] or [-7.193%; -1.550%]
unstable
[-11.612op/s; +35.924op/s] or [-5.033%; +15.573%]
18.855ms 30.558ms 242.844op/s 20.035ms 31.955ms 230.688op/s
Request duration reports for insecure-bank
gantt
    title insecure-bank - request duration [CI 0.99] : candidate=1.62.0-SNAPSHOT~f8fc1df1dd, baseline=1.62.0-SNAPSHOT~140eee9add
    dateFormat X
    axisFormat %s
section baseline
no_agent (1.247 ms) : 1234, 1260
.   : milestone, 1247,
iast (3.45 ms) : 3407, 3494
.   : milestone, 3450,
iast_FULL (6.035 ms) : 5974, 6097
.   : milestone, 6035,
iast_GLOBAL (3.736 ms) : 3671, 3800
.   : milestone, 3736,
profiling (2.419 ms) : 2393, 2445
.   : milestone, 2419,
tracing (1.906 ms) : 1890, 1923
.   : milestone, 1906,
section candidate
no_agent (1.223 ms) : 1211, 1234
.   : milestone, 1223,
iast (3.34 ms) : 3298, 3382
.   : milestone, 3340,
iast_FULL (5.997 ms) : 5935, 6059
.   : milestone, 5997,
iast_GLOBAL (3.625 ms) : 3571, 3679
.   : milestone, 3625,
profiling (2.087 ms) : 2068, 2106
.   : milestone, 2087,
tracing (1.919 ms) : 1901, 1938
.   : milestone, 1919,
Loading
  • baseline results
Variant Request duration [CI 0.99] Δ no_agent
no_agent 1.247 ms [1.234 ms, 1.26 ms] -
iast 3.45 ms [3.407 ms, 3.494 ms] 2.203 ms (176.7%)
iast_FULL 6.035 ms [5.974 ms, 6.097 ms] 4.788 ms (384.0%)
iast_GLOBAL 3.736 ms [3.671 ms, 3.8 ms] 2.489 ms (199.6%)
profiling 2.419 ms [2.393 ms, 2.445 ms] 1.172 ms (94.0%)
tracing 1.906 ms [1.89 ms, 1.923 ms] 659.504 µs (52.9%)
  • candidate results
Variant Request duration [CI 0.99] Δ no_agent
no_agent 1.223 ms [1.211 ms, 1.234 ms] -
iast 3.34 ms [3.298 ms, 3.382 ms] 2.118 ms (173.2%)
iast_FULL 5.997 ms [5.935 ms, 6.059 ms] 4.774 ms (390.5%)
iast_GLOBAL 3.625 ms [3.571 ms, 3.679 ms] 2.402 ms (196.5%)
profiling 2.087 ms [2.068 ms, 2.106 ms] 864.309 µs (70.7%)
tracing 1.919 ms [1.901 ms, 1.938 ms] 696.95 µs (57.0%)
Request duration reports for petclinic
gantt
    title petclinic - request duration [CI 0.99] : candidate=1.62.0-SNAPSHOT~f8fc1df1dd, baseline=1.62.0-SNAPSHOT~140eee9add
    dateFormat X
    axisFormat %s
section baseline
no_agent (18.359 ms) : 18170, 18549
.   : milestone, 18359,
appsec (20.238 ms) : 20030, 20447
.   : milestone, 20238,
code_origins (17.965 ms) : 17788, 18142
.   : milestone, 17965,
iast (19.056 ms) : 18868, 19244
.   : milestone, 19056,
profiling (18.157 ms) : 17981, 18332
.   : milestone, 18157,
tracing (17.614 ms) : 17442, 17785
.   : milestone, 17614,
section candidate
no_agent (18.379 ms) : 18194, 18564
.   : milestone, 18379,
appsec (19.217 ms) : 19024, 19411
.   : milestone, 19217,
code_origins (17.973 ms) : 17795, 18151
.   : milestone, 17973,
iast (19.53 ms) : 19334, 19727
.   : milestone, 19530,
profiling (18.542 ms) : 18359, 18724
.   : milestone, 18542,
tracing (17.807 ms) : 17634, 17981
.   : milestone, 17807,
Loading
  • baseline results
Variant Request duration [CI 0.99] Δ no_agent
no_agent 18.359 ms [18.17 ms, 18.549 ms] -
appsec 20.238 ms [20.03 ms, 20.447 ms] 1.879 ms (10.2%)
code_origins 17.965 ms [17.788 ms, 18.142 ms] -394.897 µs (-2.2%)
iast 19.056 ms [18.868 ms, 19.244 ms] 696.73 µs (3.8%)
profiling 18.157 ms [17.981 ms, 18.332 ms] -202.766 µs (-1.1%)
tracing 17.614 ms [17.442 ms, 17.785 ms] -745.918 µs (-4.1%)
  • candidate results
Variant Request duration [CI 0.99] Δ no_agent
no_agent 18.379 ms [18.194 ms, 18.564 ms] -
appsec 19.217 ms [19.024 ms, 19.411 ms] 838.657 µs (4.6%)
code_origins 17.973 ms [17.795 ms, 18.151 ms] -405.345 µs (-2.2%)
iast 19.53 ms [19.334 ms, 19.727 ms] 1.151 ms (6.3%)
profiling 18.542 ms [18.359 ms, 18.724 ms] 162.815 µs (0.9%)
tracing 17.807 ms [17.634 ms, 17.981 ms] -571.399 µs (-3.1%)

Dacapo

Parameters

Baseline Candidate
baseline_or_candidate baseline candidate
git_branch master worktree-brian.marks+memory-benchmark
git_commit_date 1776101218 1776108463
git_commit_sha 140eee9 f8fc1df
release_version 1.62.0-SNAPSHOT~140eee9add 1.62.0-SNAPSHOT~f8fc1df1dd
See matching parameters
Baseline Candidate
application biojava biojava
ci_job_date 1776110519 1776110519
ci_job_id 1591250298 1591250298
ci_pipeline_id 107457101 107457101
cpu_model Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz
kernel_version Linux runner-zfyrx7zua-project-304-concurrent-1-jllxio6c 6.8.0-1031-aws #33~22.04.1-Ubuntu SMP Thu Jun 26 14:22:30 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux Linux runner-zfyrx7zua-project-304-concurrent-1-jllxio6c 6.8.0-1031-aws #33~22.04.1-Ubuntu SMP Thu Jun 26 14:22:30 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux

Summary

Found 0 performance improvements and 0 performance regressions! Performance is the same for 11 metrics, 1 unstable metrics.

Execution time for tomcat
gantt
    title tomcat - execution time [CI 0.99] : candidate=1.62.0-SNAPSHOT~f8fc1df1dd, baseline=1.62.0-SNAPSHOT~140eee9add
    dateFormat X
    axisFormat %s
section baseline
no_agent (1.488 ms) : 1477, 1500
.   : milestone, 1488,
appsec (2.539 ms) : 2484, 2593
.   : milestone, 2539,
iast (2.268 ms) : 2199, 2337
.   : milestone, 2268,
iast_GLOBAL (2.317 ms) : 2247, 2386
.   : milestone, 2317,
profiling (2.099 ms) : 2044, 2154
.   : milestone, 2099,
tracing (2.077 ms) : 2023, 2130
.   : milestone, 2077,
section candidate
no_agent (1.487 ms) : 1476, 1499
.   : milestone, 1487,
appsec (3.846 ms) : 3622, 4069
.   : milestone, 3846,
iast (2.272 ms) : 2202, 2341
.   : milestone, 2272,
iast_GLOBAL (2.308 ms) : 2239, 2377
.   : milestone, 2308,
profiling (2.098 ms) : 2043, 2153
.   : milestone, 2098,
tracing (2.084 ms) : 2030, 2137
.   : milestone, 2084,
Loading
  • baseline results
Variant Execution Time [CI 0.99] Δ no_agent
no_agent 1.488 ms [1.477 ms, 1.5 ms] -
appsec 2.539 ms [2.484 ms, 2.593 ms] 1.05 ms (70.6%)
iast 2.268 ms [2.199 ms, 2.337 ms] 779.47 µs (52.4%)
iast_GLOBAL 2.317 ms [2.247 ms, 2.386 ms] 828.409 µs (55.7%)
profiling 2.099 ms [2.044 ms, 2.154 ms] 610.171 µs (41.0%)
tracing 2.077 ms [2.023 ms, 2.13 ms] 588.13 µs (39.5%)
  • candidate results
Variant Execution Time [CI 0.99] Δ no_agent
no_agent 1.487 ms [1.476 ms, 1.499 ms] -
appsec 3.846 ms [3.622 ms, 4.069 ms] 2.358 ms (158.5%)
iast 2.272 ms [2.202 ms, 2.341 ms] 784.052 µs (52.7%)
iast_GLOBAL 2.308 ms [2.239 ms, 2.377 ms] 820.398 µs (55.2%)
profiling 2.098 ms [2.043 ms, 2.153 ms] 610.556 µs (41.0%)
tracing 2.084 ms [2.03 ms, 2.137 ms] 596.457 µs (40.1%)
Execution time for biojava
gantt
    title biojava - execution time [CI 0.99] : candidate=1.62.0-SNAPSHOT~f8fc1df1dd, baseline=1.62.0-SNAPSHOT~140eee9add
    dateFormat X
    axisFormat %s
section baseline
no_agent (15.179 s) : 15179000, 15179000
.   : milestone, 15179000,
appsec (14.794 s) : 14794000, 14794000
.   : milestone, 14794000,
iast (18.214 s) : 18214000, 18214000
.   : milestone, 18214000,
iast_GLOBAL (18.157 s) : 18157000, 18157000
.   : milestone, 18157000,
profiling (14.948 s) : 14948000, 14948000
.   : milestone, 14948000,
tracing (14.742 s) : 14742000, 14742000
.   : milestone, 14742000,
section candidate
no_agent (15.485 s) : 15485000, 15485000
.   : milestone, 15485000,
appsec (15.083 s) : 15083000, 15083000
.   : milestone, 15083000,
iast (18.449 s) : 18449000, 18449000
.   : milestone, 18449000,
iast_GLOBAL (17.892 s) : 17892000, 17892000
.   : milestone, 17892000,
profiling (15.085 s) : 15085000, 15085000
.   : milestone, 15085000,
tracing (14.919 s) : 14919000, 14919000
.   : milestone, 14919000,
Loading
  • baseline results
Variant Execution Time [CI 0.99] Δ no_agent
no_agent 15.179 s [15.179 s, 15.179 s] -
appsec 14.794 s [14.794 s, 14.794 s] -385.0 ms (-2.5%)
iast 18.214 s [18.214 s, 18.214 s] 3.035 s (20.0%)
iast_GLOBAL 18.157 s [18.157 s, 18.157 s] 2.978 s (19.6%)
profiling 14.948 s [14.948 s, 14.948 s] -231.0 ms (-1.5%)
tracing 14.742 s [14.742 s, 14.742 s] -437.0 ms (-2.9%)
  • candidate results
Variant Execution Time [CI 0.99] Δ no_agent
no_agent 15.485 s [15.485 s, 15.485 s] -
appsec 15.083 s [15.083 s, 15.083 s] -402.0 ms (-2.6%)
iast 18.449 s [18.449 s, 18.449 s] 2.964 s (19.1%)
iast_GLOBAL 17.892 s [17.892 s, 17.892 s] 2.407 s (15.5%)
profiling 15.085 s [15.085 s, 15.085 s] -400.0 ms (-2.6%)
tracing 14.919 s [14.919 s, 14.919 s] -566.0 ms (-3.7%)

@@ -0,0 +1,2 @@
tools/
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Placing these in a "memory" folder seems off to me.

The intent of running at multiple memory settings is to simulate how the application behaves under load relative to available resources, so I don't think of this as a memory benchmark.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Moved it to benchmark/throughput/petclinic/.

Address review feedback: the benchmark measures throughput under load at
varying resource constraints, not memory specifically. Renamed directory
and updated all references.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@bm1549 bm1549 changed the title Add memory-pressure benchmark for petclinic throughput testing Add throughput benchmark for petclinic load testing Apr 13, 2026
@bm1549
Copy link
Copy Markdown
Contributor Author

bm1549 commented Apr 13, 2026

You can do that today by running twice with different --agent paths and --skip-baseline on the second run:

./run.sh --agent /path/to/dd-java-agent-1.61.0.jar --output ./results/before
./run.sh --agent /path/to/dd-java-agent-SNAPSHOT.jar --output ./results/after --skip-baseline

I could also add a --agent-before/--agent-after mode that does both in one invocation if that'd be less annoying to use.

@bm1549 bm1549 closed this Apr 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

tag: no release notes Changes to exclude from release notes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants