Skip to content

Reduce allocation overhead of ExceptionLogger / LogCollector#10684

Open
dougqh wants to merge 14 commits intomasterfrom
dougqh/exception-logger-quick-fixes
Open

Reduce allocation overhead of ExceptionLogger / LogCollector#10684
dougqh wants to merge 14 commits intomasterfrom
dougqh/exception-logger-quick-fixes

Conversation

@dougqh
Copy link
Contributor

@dougqh dougqh commented Feb 25, 2026

What Does This Do

Improves performance of exception reporting in the worst case where an exception is repeatedly thrown.

This change addresses 3 problems...

  • Constantly calling LoggerFactory.getLogger for ExceptionLogger
  • RawLogMessage.hashCode calling Objects.hash which allocate an Object[] for var-args - replaced with HashingUtils
  • RawLogMessage.equals calling Throwable.getStackTrace() which makes a defensive copy of the StackTraceElement[]

This change also includes specific optimizations for the JVM's fast throw optimization which mostly occurs for NullPointerExceptions.

Motivation

If an instrumentation continually throws an exception, the exception telemetry mechanism became a significant source of allocation.

Additional Notes

There's still significant room for further improvement here by using a more efficient data structure in LogCollector, but that change is left to a future PR.

Here are the before / after benchmark results for LogCollector...

Benchmark                                                   Mode  Cnt        Score        Error   Units
noException (before)                                       thrpt   10  18434630.329 ± 872412.330   ops/s
noException (before):gc.alloc.rate.norm                    thrpt   10        80.000 ±      0.001    B/op

noException (after)                                        thrpt   10  18606786.708 ± 683994.229   ops/s
noException (after):gc.alloc.rate.norm                     thrpt   10        48.000 ±      0.001    B/op

nullPointerException (before)                              thrpt   10  3607994.971 ± 237763.649   ops/s
nullPointerException (before):gc.alloc.rate.norm           thrpt   10      360.001 ±      0.001    B/op

nullPointerException (after)                               thrpt   10  7583550.844 ± 272418.400   ops/s
nullPointerException (after):gc.alloc.rate.norm            thrpt   10       64.000 ±      0.001    B/op

unsupportedOperationException (before)                     thrpt   10   396918.988 ±   3605.382   ops/s
unsupportedOperationException (before):gc.alloc.rate.norm  thrpt   10     1984.000 ±      0.002    B/op

unsupportedOperationException (after)                      thrpt   10   402548.447 ±   3214.553   ops/s
unsupportedOperationException (after):gc.alloc.rate.norm   thrpt   10     1592.002 ±      0.001    B/op

The nullPointerException benchmark represents the hot exception / fast throw case.
In this case, there's a 2x gain in throughput from not needing to call getStackTrace at all.

The unsupportedOperationException benchmark represents a typical exception case.
In this case, there's a modest 1.5% gain in throughput, but a 20% reduction in allocation.

The noException benchmark represents a log message without a Throwable.
In this case, there's a modest reduction in allocation - likely from eliminating var-arg array allocation in hashCode

Contributor Checklist

Jira ticket: [PROJ-IDENT]

Note: Once your PR is ready to merge, add it to the merge queue by commenting /merge. /merge -c cancels the queue request. /merge -f --reason "reason" skips all merge queue checks; please use this judiciously, as some checks do not run at the PR-level. For more information, see this doc.

Unlike most loggers, ExceptionLogger can be looked up repeatedly by the exception handling code woven into instrumentation.

If an instrumentation constantly creates an exception, that could cause the Logger construction to become which results in creating SLCompatHelper constantly which in turn creates String-s and byte[]-s while determined the looger level.

To avoid that problem, the LoggerHelper is cached for ExceptionLogger.  We should also consider changing how the Logger is acuired, but that will be addressed in a separate PR.
LogCollector creates RawLogMessage objects that act as keys for de-duplication.  If instrumentation has a hot exception, RawLogMessage construction can become a bottleneck.

While this change doesn't eliminate RawLogMessage, it does reduce the cost of hashCode & equals which are used by the Map to de-duplicate.

hashCode is improved by using the new HashingUtils.hash which avoids the array creation needed to call the var-arg method Objects.hash.

equals is improved by special casing, this.throwable == that.throwable.  While this case seems unlikely, it occurs when the JVM's hot throw optimization kicks in for NPEs.

equals is further improved by caching the result of getStackTrace.  Because getStackTrace returns an array, it makes a defensive copy on each call.

By caching getStackTrace, we avoid making a copy each time equals is called.
@dougqh dougqh requested a review from a team as a code owner February 25, 2026 19:37
@github-actions
Copy link
Contributor

github-actions bot commented Feb 25, 2026

Hi! 👋 Thanks for your pull request! 🎉

To help us review it, please make sure to:

  • Add at least one type, and one component or instrumentation label to the pull request

If you need help, please check our contributing guidelines.

Making cachedStackTrace private
For clarity, returning local stackTrace rather than cachedStackTrace
Changed hot exception to fast throw, since that in comments, since that is the name used by the JVM
@dougqh dougqh added comp: telemetry Telemetry type: enhancement Enhancements and improvements tag: performance Performance related changes labels Feb 25, 2026
@dougqh dougqh changed the title Quick fixes to reduce overhead of ExceptionLogger / LogCollector Reduce allocation overhead of ExceptionLogger / LogCollector Feb 25, 2026
Introduced a broken import while reincorporating stand-alone reproduction into code base
…Dog/dd-trace-java into dougqh/exception-logger-quick-fixes
Fixed bad copy job from stand-alone reproduction
@pr-commenter
Copy link

pr-commenter bot commented Feb 25, 2026

Benchmarks

Startup

Parameters

Baseline Candidate
baseline_or_candidate baseline candidate
git_branch master dougqh/exception-logger-quick-fixes
git_commit_date 1772200579 1772206957
git_commit_sha c6896b7 705873f
release_version 1.60.0-SNAPSHOT~c6896b7cf7 1.60.0-SNAPSHOT~705873ff61
See matching parameters
Baseline Candidate
application insecure-bank insecure-bank
ci_job_date 1772208623 1772208623
ci_job_id 1463068400 1463068400
ci_pipeline_id 99454106 99454106
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-ts01fg9t 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-ts01fg9t 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 63 metrics, 8 unstable metrics.

Startup time reports for insecure-bank
gantt
    title insecure-bank - global startup overhead: candidate=1.60.0-SNAPSHOT~705873ff61, baseline=1.60.0-SNAPSHOT~c6896b7cf7

    dateFormat X
    axisFormat %s
section tracing
Agent [baseline] (1.075 s) : 0, 1075252
Total [baseline] (8.811 s) : 0, 8811366
Agent [candidate] (1.067 s) : 0, 1066621
Total [candidate] (8.765 s) : 0, 8764662
section iast
Agent [baseline] (1.23 s) : 0, 1229898
Total [baseline] (9.382 s) : 0, 9382216
Agent [candidate] (1.231 s) : 0, 1231182
Total [candidate] (9.349 s) : 0, 9348856
Loading
  • baseline results
Module Variant Duration Δ tracing
Agent tracing 1.075 s -
Agent iast 1.23 s 154.646 ms (14.4%)
Total tracing 8.811 s -
Total iast 9.382 s 570.85 ms (6.5%)
  • candidate results
Module Variant Duration Δ tracing
Agent tracing 1.067 s -
Agent iast 1.231 s 164.562 ms (15.4%)
Total tracing 8.765 s -
Total iast 9.349 s 584.194 ms (6.7%)
gantt
    title insecure-bank - break down per module: candidate=1.60.0-SNAPSHOT~705873ff61, baseline=1.60.0-SNAPSHOT~c6896b7cf7

    dateFormat X
    axisFormat %s
section tracing
crashtracking [baseline] (1.222 ms) : 0, 1222
crashtracking [candidate] (1.19 ms) : 0, 1190
BytebuddyAgent [baseline] (635.599 ms) : 0, 635599
BytebuddyAgent [candidate] (628.489 ms) : 0, 628489
AgentMeter [baseline] (29.395 ms) : 0, 29395
AgentMeter [candidate] (29.026 ms) : 0, 29026
GlobalTracer [baseline] (260.177 ms) : 0, 260177
GlobalTracer [candidate] (258.113 ms) : 0, 258113
AppSec [baseline] (33.427 ms) : 0, 33427
AppSec [candidate] (33.074 ms) : 0, 33074
Debugger [baseline] (62.293 ms) : 0, 62293
Debugger [candidate] (63.135 ms) : 0, 63135
Remote Config [baseline] (636.532 µs) : 0, 637
Remote Config [candidate] (617.966 µs) : 0, 618
Telemetry [baseline] (11.509 ms) : 0, 11509
Telemetry [candidate] (11.514 ms) : 0, 11514
Flare Poller [baseline] (4.577 ms) : 0, 4577
Flare Poller [candidate] (5.363 ms) : 0, 5363
section iast
crashtracking [baseline] (1.187 ms) : 0, 1187
crashtracking [candidate] (1.193 ms) : 0, 1193
BytebuddyAgent [baseline] (795.035 ms) : 0, 795035
BytebuddyAgent [candidate] (795.863 ms) : 0, 795863
AgentMeter [baseline] (11.284 ms) : 0, 11284
AgentMeter [candidate] (11.272 ms) : 0, 11272
GlobalTracer [baseline] (246.872 ms) : 0, 246872
GlobalTracer [candidate] (247.386 ms) : 0, 247386
IAST [baseline] (27.076 ms) : 0, 27076
IAST [candidate] (27.015 ms) : 0, 27015
AppSec [baseline] (33.775 ms) : 0, 33775
AppSec [candidate] (35.94 ms) : 0, 35940
Debugger [baseline] (65.936 ms) : 0, 65936
Debugger [candidate] (63.966 ms) : 0, 63966
Remote Config [baseline] (544.672 µs) : 0, 545
Remote Config [candidate] (522.516 µs) : 0, 523
Telemetry [baseline] (8.744 ms) : 0, 8744
Telemetry [candidate] (8.672 ms) : 0, 8672
Flare Poller [baseline] (3.47 ms) : 0, 3470
Flare Poller [candidate] (3.408 ms) : 0, 3408
Loading
Startup time reports for petclinic
gantt
    title petclinic - global startup overhead: candidate=1.60.0-SNAPSHOT~705873ff61, baseline=1.60.0-SNAPSHOT~c6896b7cf7

    dateFormat X
    axisFormat %s
section tracing
Agent [baseline] (1.07 s) : 0, 1070213
Total [baseline] (11.009 s) : 0, 11008924
Agent [candidate] (1.074 s) : 0, 1073712
Total [candidate] (10.954 s) : 0, 10953972
section appsec
Agent [baseline] (1.236 s) : 0, 1236475
Total [baseline] (11.057 s) : 0, 11057359
Agent [candidate] (1.237 s) : 0, 1237068
Total [candidate] (11.043 s) : 0, 11043413
section iast
Agent [baseline] (1.228 s) : 0, 1228312
Total [baseline] (11.208 s) : 0, 11207582
Agent [candidate] (1.233 s) : 0, 1233309
Total [candidate] (11.189 s) : 0, 11188907
section profiling
Agent [baseline] (1.198 s) : 0, 1197571
Total [baseline] (11.081 s) : 0, 11080860
Agent [candidate] (1.191 s) : 0, 1191047
Total [candidate] (10.994 s) : 0, 10993608
Loading
  • baseline results
Module Variant Duration Δ tracing
Agent tracing 1.07 s -
Agent appsec 1.236 s 166.262 ms (15.5%)
Agent iast 1.228 s 158.099 ms (14.8%)
Agent profiling 1.198 s 127.358 ms (11.9%)
Total tracing 11.009 s -
Total appsec 11.057 s 48.435 ms (0.4%)
Total iast 11.208 s 198.658 ms (1.8%)
Total profiling 11.081 s 71.937 ms (0.7%)
  • candidate results
Module Variant Duration Δ tracing
Agent tracing 1.074 s -
Agent appsec 1.237 s 163.356 ms (15.2%)
Agent iast 1.233 s 159.597 ms (14.9%)
Agent profiling 1.191 s 117.335 ms (10.9%)
Total tracing 10.954 s -
Total appsec 11.043 s 89.441 ms (0.8%)
Total iast 11.189 s 234.935 ms (2.1%)
Total profiling 10.994 s 39.636 ms (0.4%)
gantt
    title petclinic - break down per module: candidate=1.60.0-SNAPSHOT~705873ff61, baseline=1.60.0-SNAPSHOT~c6896b7cf7

    dateFormat X
    axisFormat %s
section tracing
crashtracking [baseline] (1.199 ms) : 0, 1199
crashtracking [candidate] (1.207 ms) : 0, 1207
BytebuddyAgent [baseline] (632.088 ms) : 0, 632088
BytebuddyAgent [candidate] (632.97 ms) : 0, 632970
AgentMeter [baseline] (29.301 ms) : 0, 29301
AgentMeter [candidate] (29.317 ms) : 0, 29317
GlobalTracer [baseline] (258.922 ms) : 0, 258922
GlobalTracer [candidate] (259.602 ms) : 0, 259602
AppSec [baseline] (33.304 ms) : 0, 33304
AppSec [candidate] (33.306 ms) : 0, 33306
Debugger [baseline] (64.905 ms) : 0, 64905
Debugger [candidate] (65.292 ms) : 0, 65292
Remote Config [baseline] (610.013 µs) : 0, 610
Remote Config [candidate] (620.738 µs) : 0, 621
Telemetry [baseline] (9.941 ms) : 0, 9941
Telemetry [candidate] (11.47 ms) : 0, 11470
Flare Poller [baseline] (3.783 ms) : 0, 3783
Flare Poller [candidate] (3.685 ms) : 0, 3685
section appsec
crashtracking [baseline] (1.18 ms) : 0, 1180
crashtracking [candidate] (1.202 ms) : 0, 1202
BytebuddyAgent [baseline] (656.128 ms) : 0, 656128
BytebuddyAgent [candidate] (656.754 ms) : 0, 656754
AgentMeter [baseline] (12.052 ms) : 0, 12052
AgentMeter [candidate] (11.998 ms) : 0, 11998
GlobalTracer [baseline] (258.186 ms) : 0, 258186
GlobalTracer [candidate] (257.923 ms) : 0, 257923
IAST [baseline] (25.263 ms) : 0, 25263
IAST [candidate] (25.341 ms) : 0, 25341
AppSec [baseline] (167.568 ms) : 0, 167568
AppSec [candidate] (167.412 ms) : 0, 167412
Debugger [baseline] (66.39 ms) : 0, 66390
Debugger [candidate] (66.685 ms) : 0, 66685
Remote Config [baseline] (674.315 µs) : 0, 674
Remote Config [candidate] (689.458 µs) : 0, 689
Telemetry [baseline] (9.347 ms) : 0, 9347
Telemetry [candidate] (9.394 ms) : 0, 9394
Flare Poller [baseline] (3.647 ms) : 0, 3647
Flare Poller [candidate] (3.613 ms) : 0, 3613
section iast
crashtracking [baseline] (1.202 ms) : 0, 1202
crashtracking [candidate] (1.192 ms) : 0, 1192
BytebuddyAgent [baseline] (793.851 ms) : 0, 793851
BytebuddyAgent [candidate] (797.159 ms) : 0, 797159
AgentMeter [baseline] (11.284 ms) : 0, 11284
AgentMeter [candidate] (11.349 ms) : 0, 11349
GlobalTracer [baseline] (246.326 ms) : 0, 246326
GlobalTracer [candidate] (247.349 ms) : 0, 247349
IAST [baseline] (26.968 ms) : 0, 26968
IAST [candidate] (27.229 ms) : 0, 27229
AppSec [baseline] (31.281 ms) : 0, 31281
AppSec [candidate] (34.718 ms) : 0, 34718
Debugger [baseline] (68.978 ms) : 0, 68978
Debugger [candidate] (65.539 ms) : 0, 65539
Remote Config [baseline] (523.328 µs) : 0, 523
Remote Config [candidate] (538.119 µs) : 0, 538
Telemetry [baseline] (8.542 ms) : 0, 8542
Telemetry [candidate] (8.73 ms) : 0, 8730
Flare Poller [baseline] (3.431 ms) : 0, 3431
Flare Poller [candidate] (3.447 ms) : 0, 3447
section profiling
crashtracking [baseline] (1.192 ms) : 0, 1192
crashtracking [candidate] (1.166 ms) : 0, 1166
BytebuddyAgent [baseline] (686.134 ms) : 0, 686134
BytebuddyAgent [candidate] (682.835 ms) : 0, 682835
AgentMeter [baseline] (8.646 ms) : 0, 8646
AgentMeter [candidate] (8.576 ms) : 0, 8576
GlobalTracer [baseline] (217.562 ms) : 0, 217562
GlobalTracer [candidate] (215.947 ms) : 0, 215947
AppSec [baseline] (32.866 ms) : 0, 32866
AppSec [candidate] (32.415 ms) : 0, 32415
Debugger [baseline] (67.287 ms) : 0, 67287
Debugger [candidate] (66.902 ms) : 0, 66902
Remote Config [baseline] (630.827 µs) : 0, 631
Remote Config [candidate] (634.251 µs) : 0, 634
Telemetry [baseline] (8.944 ms) : 0, 8944
Telemetry [candidate] (9.001 ms) : 0, 9001
Flare Poller [baseline] (3.772 ms) : 0, 3772
Flare Poller [candidate] (3.746 ms) : 0, 3746
ProfilingAgent [baseline] (99.75 ms) : 0, 99750
ProfilingAgent [candidate] (98.975 ms) : 0, 98975
Profiling [baseline] (100.336 ms) : 0, 100336
Profiling [candidate] (99.544 ms) : 0, 99544
Loading

Load

Parameters

Baseline Candidate
baseline_or_candidate baseline candidate
git_branch master dougqh/exception-logger-quick-fixes
git_commit_date 1772200579 1772206957
git_commit_sha c6896b7 705873f
release_version 1.60.0-SNAPSHOT~c6896b7cf7 1.60.0-SNAPSHOT~705873ff61
See matching parameters
Baseline Candidate
application insecure-bank insecure-bank
ci_job_date 1772209199 1772209199
ci_job_id 1463068403 1463068403
ci_pipeline_id 99454106 99454106
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-c5bplq0h 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-c5bplq0h 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 1 performance regressions! Performance is the same for 19 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:iast_GLOBAL:high_load worse
[+63.882µs; +208.344µs] or [+2.339%; +7.627%]
same
[-81.477µs; +298.116µs] or [-1.045%; +3.822%]
unstable
[-180.078op/s; +112.578op/s] or [-13.765%; +8.606%]
2.868ms 7.907ms 1274.438op/s 2.732ms 7.799ms 1308.188op/s
Request duration reports for insecure-bank
gantt
    title insecure-bank - request duration [CI 0.99] : candidate=1.60.0-SNAPSHOT~705873ff61, baseline=1.60.0-SNAPSHOT~c6896b7cf7
    dateFormat X
    axisFormat %s
section baseline
no_agent (1.186 ms) : 1175, 1198
.   : milestone, 1186,
iast (3.215 ms) : 3172, 3257
.   : milestone, 3215,
iast_FULL (6.133 ms) : 6071, 6195
.   : milestone, 6133,
iast_GLOBAL (3.505 ms) : 3445, 3564
.   : milestone, 3505,
profiling (2.128 ms) : 2107, 2149
.   : milestone, 2128,
tracing (1.839 ms) : 1823, 1856
.   : milestone, 1839,
section candidate
no_agent (1.183 ms) : 1171, 1195
.   : milestone, 1183,
iast (3.163 ms) : 3120, 3206
.   : milestone, 3163,
iast_FULL (5.965 ms) : 5905, 6025
.   : milestone, 5965,
iast_GLOBAL (3.597 ms) : 3542, 3653
.   : milestone, 3597,
profiling (1.962 ms) : 1944, 1980
.   : milestone, 1962,
tracing (1.809 ms) : 1794, 1825
.   : milestone, 1809,
Loading
  • baseline results
Variant Request duration [CI 0.99] Δ no_agent
no_agent 1.186 ms [1.175 ms, 1.198 ms] -
iast 3.215 ms [3.172 ms, 3.257 ms] 2.028 ms (171.0%)
iast_FULL 6.133 ms [6.071 ms, 6.195 ms] 4.946 ms (416.9%)
iast_GLOBAL 3.505 ms [3.445 ms, 3.564 ms] 2.318 ms (195.4%)
profiling 2.128 ms [2.107 ms, 2.149 ms] 941.415 µs (79.3%)
tracing 1.839 ms [1.823 ms, 1.856 ms] 652.8 µs (55.0%)
  • candidate results
Variant Request duration [CI 0.99] Δ no_agent
no_agent 1.183 ms [1.171 ms, 1.195 ms] -
iast 3.163 ms [3.12 ms, 3.206 ms] 1.98 ms (167.4%)
iast_FULL 5.965 ms [5.905 ms, 6.025 ms] 4.782 ms (404.2%)
iast_GLOBAL 3.597 ms [3.542 ms, 3.653 ms] 2.414 ms (204.1%)
profiling 1.962 ms [1.944 ms, 1.98 ms] 779.063 µs (65.9%)
tracing 1.809 ms [1.794 ms, 1.825 ms] 626.368 µs (52.9%)
Request duration reports for petclinic
gantt
    title petclinic - request duration [CI 0.99] : candidate=1.60.0-SNAPSHOT~705873ff61, baseline=1.60.0-SNAPSHOT~c6896b7cf7
    dateFormat X
    axisFormat %s
section baseline
no_agent (18.258 ms) : 18069, 18447
.   : milestone, 18258,
appsec (18.703 ms) : 18510, 18896
.   : milestone, 18703,
code_origins (17.782 ms) : 17606, 17958
.   : milestone, 17782,
iast (17.708 ms) : 17533, 17884
.   : milestone, 17708,
profiling (18.568 ms) : 18381, 18754
.   : milestone, 18568,
tracing (17.908 ms) : 17728, 18088
.   : milestone, 17908,
section candidate
no_agent (17.962 ms) : 17787, 18137
.   : milestone, 17962,
appsec (19.174 ms) : 18980, 19367
.   : milestone, 19174,
code_origins (18.087 ms) : 17908, 18266
.   : milestone, 18087,
iast (17.606 ms) : 17429, 17782
.   : milestone, 17606,
profiling (18.863 ms) : 18674, 19052
.   : milestone, 18863,
tracing (17.716 ms) : 17538, 17894
.   : milestone, 17716,
Loading
  • baseline results
Variant Request duration [CI 0.99] Δ no_agent
no_agent 18.258 ms [18.069 ms, 18.447 ms] -
appsec 18.703 ms [18.51 ms, 18.896 ms] 444.656 µs (2.4%)
code_origins 17.782 ms [17.606 ms, 17.958 ms] -476.267 µs (-2.6%)
iast 17.708 ms [17.533 ms, 17.884 ms] -549.798 µs (-3.0%)
profiling 18.568 ms [18.381 ms, 18.754 ms] 309.671 µs (1.7%)
tracing 17.908 ms [17.728 ms, 18.088 ms] -350.54 µs (-1.9%)
  • candidate results
Variant Request duration [CI 0.99] Δ no_agent
no_agent 17.962 ms [17.787 ms, 18.137 ms] -
appsec 19.174 ms [18.98 ms, 19.367 ms] 1.212 ms (6.7%)
code_origins 18.087 ms [17.908 ms, 18.266 ms] 125.141 µs (0.7%)
iast 17.606 ms [17.429 ms, 17.782 ms] -356.506 µs (-2.0%)
profiling 18.863 ms [18.674 ms, 19.052 ms] 900.772 µs (5.0%)
tracing 17.716 ms [17.538 ms, 17.894 ms] -245.869 µs (-1.4%)

Dacapo

Parameters

Baseline Candidate
baseline_or_candidate baseline candidate
git_branch master dougqh/exception-logger-quick-fixes
git_commit_date 1772200579 1772206957
git_commit_sha c6896b7 705873f
release_version 1.60.0-SNAPSHOT~c6896b7cf7 1.60.0-SNAPSHOT~705873ff61
See matching parameters
Baseline Candidate
application biojava biojava
ci_job_date 1772208937 1772208937
ci_job_id 1463068406 1463068406
ci_pipeline_id 99454106 99454106
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-ic0t4h8p 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-ic0t4h8p 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 10 metrics, 2 unstable metrics.

Execution time for biojava
gantt
    title biojava - execution time [CI 0.99] : candidate=1.60.0-SNAPSHOT~705873ff61, baseline=1.60.0-SNAPSHOT~c6896b7cf7
    dateFormat X
    axisFormat %s
section baseline
no_agent (15.272 s) : 15272000, 15272000
.   : milestone, 15272000,
appsec (14.897 s) : 14897000, 14897000
.   : milestone, 14897000,
iast (18.32 s) : 18320000, 18320000
.   : milestone, 18320000,
iast_GLOBAL (17.618 s) : 17618000, 17618000
.   : milestone, 17618000,
profiling (15.013 s) : 15013000, 15013000
.   : milestone, 15013000,
tracing (14.867 s) : 14867000, 14867000
.   : milestone, 14867000,
section candidate
no_agent (15.454 s) : 15454000, 15454000
.   : milestone, 15454000,
appsec (14.628 s) : 14628000, 14628000
.   : milestone, 14628000,
iast (18.118 s) : 18118000, 18118000
.   : milestone, 18118000,
iast_GLOBAL (17.757 s) : 17757000, 17757000
.   : milestone, 17757000,
profiling (15.505 s) : 15505000, 15505000
.   : milestone, 15505000,
tracing (14.806 s) : 14806000, 14806000
.   : milestone, 14806000,
Loading
  • baseline results
Variant Execution Time [CI 0.99] Δ no_agent
no_agent 15.272 s [15.272 s, 15.272 s] -
appsec 14.897 s [14.897 s, 14.897 s] -375.0 ms (-2.5%)
iast 18.32 s [18.32 s, 18.32 s] 3.048 s (20.0%)
iast_GLOBAL 17.618 s [17.618 s, 17.618 s] 2.346 s (15.4%)
profiling 15.013 s [15.013 s, 15.013 s] -259.0 ms (-1.7%)
tracing 14.867 s [14.867 s, 14.867 s] -405.0 ms (-2.7%)
  • candidate results
Variant Execution Time [CI 0.99] Δ no_agent
no_agent 15.454 s [15.454 s, 15.454 s] -
appsec 14.628 s [14.628 s, 14.628 s] -826.0 ms (-5.3%)
iast 18.118 s [18.118 s, 18.118 s] 2.664 s (17.2%)
iast_GLOBAL 17.757 s [17.757 s, 17.757 s] 2.303 s (14.9%)
profiling 15.505 s [15.505 s, 15.505 s] 51.0 ms (0.3%)
tracing 14.806 s [14.806 s, 14.806 s] -648.0 ms (-4.2%)
Execution time for tomcat
gantt
    title tomcat - execution time [CI 0.99] : candidate=1.60.0-SNAPSHOT~705873ff61, baseline=1.60.0-SNAPSHOT~c6896b7cf7
    dateFormat X
    axisFormat %s
section baseline
no_agent (1.478 ms) : 1467, 1490
.   : milestone, 1478,
appsec (3.755 ms) : 3538, 3971
.   : milestone, 3755,
iast (2.253 ms) : 2184, 2322
.   : milestone, 2253,
iast_GLOBAL (2.295 ms) : 2226, 2364
.   : milestone, 2295,
profiling (2.497 ms) : 2332, 2662
.   : milestone, 2497,
tracing (2.059 ms) : 2006, 2112
.   : milestone, 2059,
section candidate
no_agent (1.476 ms) : 1464, 1487
.   : milestone, 1476,
appsec (3.804 ms) : 3581, 4028
.   : milestone, 3804,
iast (2.248 ms) : 2180, 2316
.   : milestone, 2248,
iast_GLOBAL (2.298 ms) : 2228, 2367
.   : milestone, 2298,
profiling (2.091 ms) : 2036, 2147
.   : milestone, 2091,
tracing (2.055 ms) : 2002, 2108
.   : milestone, 2055,
Loading
  • baseline results
Variant Execution Time [CI 0.99] Δ no_agent
no_agent 1.478 ms [1.467 ms, 1.49 ms] -
appsec 3.755 ms [3.538 ms, 3.971 ms] 2.276 ms (154.0%)
iast 2.253 ms [2.184 ms, 2.322 ms] 774.788 µs (52.4%)
iast_GLOBAL 2.295 ms [2.226 ms, 2.364 ms] 816.654 µs (55.2%)
profiling 2.497 ms [2.332 ms, 2.662 ms] 1.018 ms (68.9%)
tracing 2.059 ms [2.006 ms, 2.112 ms] 580.502 µs (39.3%)
  • candidate results
Variant Execution Time [CI 0.99] Δ no_agent
no_agent 1.476 ms [1.464 ms, 1.487 ms] -
appsec 3.804 ms [3.581 ms, 4.028 ms] 2.329 ms (157.8%)
iast 2.248 ms [2.18 ms, 2.316 ms] 772.24 µs (52.3%)
iast_GLOBAL 2.298 ms [2.228 ms, 2.367 ms] 821.774 µs (55.7%)
profiling 2.091 ms [2.036 ms, 2.147 ms] 615.609 µs (41.7%)
tracing 2.055 ms [2.002 ms, 2.108 ms] 579.365 µs (39.3%)

@Measurement(iterations = 5)
@Threads(8)
public class ExceptionLoggerBenchmark {
@Benchmark
Copy link
Contributor Author

@dougqh dougqh Feb 27, 2026

Choose a reason for hiding this comment

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

I attempted to create a full end-to-end benchmark, but that kept running out of memory unless I used SampleTime mode. Unfortunately, the SampleTime output wasn't as useful in my opinion.

In the interest of forward progress, I decided to split each part into its own benchmark instead.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

comp: telemetry Telemetry tag: performance Performance related changes type: enhancement Enhancements and improvements

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant