Skip to content

Bound class-map growth to fix reliability-chaos OOMs#654

Merged
jbachorik merged 5 commits into
mainfrom
jb/reliability-chaos-oom
Jul 13, 2026
Merged

Bound class-map growth to fix reliability-chaos OOMs#654
jbachorik merged 5 commits into
mainfrom
jb/reliability-chaos-oom

Conversation

@jbachorik

@jbachorik jbachorik commented Jul 13, 2026

Copy link
Copy Markdown
Collaborator

What does this PR do?:
Bounds Profiler::_class_map growth via bounded_lookup(key, len, size_limit) so a workload with unbounded distinct-class churn (e.g. dynamic class generation) can no longer grow the class-name dictionary for the whole life of the process. Profiler::lookupClass now returns -1 once the cap (MAX_CLASS_MAP_SIZE) is hit, and increments a new CLASS_MAP_AT_CAPACITY counter. LivenessTracker::flush_table now drops the sample instead of narrowing -1 into the u32 event id (which would have wrapped to 0xFFFFFFFF and corrupted liveness attribution), mirroring ObjectSampler's existing convention for the same lookupClass() failure mode.

Also tunes the reliability-chaos-aarch64 CI job's tcmalloc allocator settings (TCMALLOC_RELEASE_RATE=10, TCMALLOC_AGGRESSIVE_DECOMMIT=1) to fix a separate, allocator-specific OOM that kept recurring after the class-map fix landed.

Motivation:
reliability-chaos-* CI jobs were hitting frequent OOMs (exit 137/OOMKilled). Root cause: _class_map is a StringDictionary whose rotate() carries the full accumulated key set forward on every JFR chunk (it only shrinks via clearAll() on profiler restart), so the chaos suite's class-churn antagonists (which mint ~1000 unique class names/sec) grow it without bound until the container OOMs.

A second, unrelated OOM kept failing reliability-chaos-aarch64 (tcmalloc, profiler+tracer, JDK 25.0.3) even after the class-map fix. libtcmalloc-minimal4's defaults are slow to return per-thread caches to the OS on aarch64, and the chaos suite's thread-churn/dump-storm antagonists cycle many short-lived threads over the run, inflating container RSS past the limit independent of any application-level leak. Confirmed on a real aarch64 host under a 3GB memory.max cgroup: baseline OOM-killed (oom_kill=1, RC=137); with TCMALLOC_RELEASE_RATE=10 + TCMALLOC_AGGRESSIVE_DECOMMIT=1 the identical run completes cleanly (RC=0).

Additional Notes:
None.

How to test the change?:
Added unit tests:

  • stringDictionary_ut.cpp::BoundedLookupWithSizeLimitRejectsNewKeyAtCapacity — exercises the 3-arg bounded_lookup(key, len, size_limit) at-capacity behavior.
  • livenessTracker_ut.cpp::NegativeClassIdSampleIsDropped / NonNegativeClassIdSampleIsRecorded / UnguardedNegativeClassIdWrapsToMaxU32 — cover the drop-on--1 guard and the wraparound bug it prevents.

Ran via gtestDebug_stringDictionary_ut and gtestDebug_livenessTracker_ut, all passing.

For the tcmalloc tuning: reproduced the aarch64 chaos OOM on a real host under a 3GB memory.max cgroup (baseline OOM-killed, tuned run completes cleanly with RC=0); final validation is the next scheduled reliability-chaos-aarch64 pipeline run.

For Datadog employees:

  • If this PR touches code that signs or publishes builds or packages, or handles
    credentials of any kind, I've requested a security review (run the dd:platform-security-review
    skill, or file a request via the PSEC review form).
    bewaire also runs automatically on every PR.
  • This PR doesn't touch any of that.
  • JIRA: [JIRA-XXXX]

Unsure? Have a question? Request a review!

Profiler::_class_map grows unbounded under sustained distinct-class
churn since rotate() carries the full accumulated set forward each
JFR chunk. Cap it via bounded_lookup(), drop liveness samples instead
of wrapping -1 into the u32 event id, and add a counter for dropped
samples.
@jbachorik jbachorik requested a review from Copilot July 13, 2026 11:20
@jbachorik jbachorik marked this pull request as ready for review July 13, 2026 11:20
@jbachorik jbachorik requested a review from a team as a code owner July 13, 2026 11:20

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: ff0e37aaef

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread ddprof-lib/src/main/cpp/profiler.cpp

Copilot AI left a comment

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.

Pull request overview

Bounds the profiler’s class-name dictionary growth to prevent container OOMs under workloads with unbounded dynamic class churn, and fixes a correctness issue where a failed class lookup (-1) could wrap into the unsigned JFR event id.

Changes:

  • Cap Profiler::_class_map growth by switching lookupClass() to StringDictionary::bounded_lookup(..., MAX_CLASS_MAP_SIZE) and returning -1 once the cap is reached (with a new CLASS_MAP_AT_CAPACITY counter).
  • Guard LivenessTracker::flush_table() to drop samples when lookupClass() returns -1 to avoid u32 wraparound corruption.
  • Add/extend C++ unit tests for the bounded dictionary behavior and the negative-class-id guard scenario.

Reviewed changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
ddprof-lib/src/main/cpp/profiler.h Introduces MAX_CLASS_MAP_SIZE cap for the class-name dictionary.
ddprof-lib/src/main/cpp/profiler.cpp Uses bounded lookup for class names, increments a new counter, and returns -1 on failure.
ddprof-lib/src/main/cpp/livenessTracker.cpp Drops liveness samples when class id is negative to prevent u32 wraparound.
ddprof-lib/src/main/cpp/counters.h Adds CLASS_MAP_AT_CAPACITY counter definition.
ddprof-lib/src/test/cpp/stringDictionary_ut.cpp Adds a unit test validating size-limit behavior of bounded_lookup.
ddprof-lib/src/test/cpp/livenessTracker_ut.cpp Adds tests documenting guarded vs. unguarded negative class-id narrowing behavior.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread ddprof-lib/src/main/cpp/livenessTracker.cpp
@dd-octo-sts

dd-octo-sts Bot commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

CI Test Results

Run: #29270148867 | Commit: 18c6029 | Duration: 14m 7s (longest job)

All 32 test jobs passed

Status Overview

JDK glibc-aarch64/debug glibc-amd64/debug musl-aarch64/debug musl-amd64/debug
8 - - -
8-ibm - - -
8-j9 - -
8-librca - -
8-orcl - - -
11 - - -
11-j9 - -
11-librca - -
17 - -
17-graal - -
17-j9 - -
17-librca - -
21 - -
21-graal - -
21-librca - -
25 - -
25-graal - -
25-librca - -

Legend: ✅ passed | ❌ failed | ⚪ skipped | 🚫 cancelled

Summary: Total: 32 | Passed: 32 | Failed: 0


Updated: 2026-07-13 17:39:53 UTC

@dd-octo-sts

dd-octo-sts Bot commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Benchmark Results (commit ff0e37a)

Pipeline: https://gitlab.ddbuild.io/DataDog/apm-reliability/benchmarking-platform/-/pipelines/124284718 Commit: ff0e37aaef8c7ebda20c9f2af9fa4b22ef8db705

⚠️ Significant outliers

  • 🔴 fj-kmeans (JDK 21): runtime +4.1% (2709→2820 ms)
  • 🟢 future-genetic (JDK 21): runtime -2.5% (2119→2065 ms)
Runtime details (per benchmark × JDK)
Benchmark JDK Latest Dev Δ (dev vs latest) Issues L/D
akka-uct 21 ✅ 10172 ms (21 iters) ✅ 10239 ms (21 iters) ≈ +0.7% (±10.9%) — / —
akka-uct 25 ✅ 8861 ms (24 iters) ✅ 8906 ms (24 iters) ≈ +0.5% (±9.8%) — / —
finagle-chirper 21 ✅ 5991 ms (33 iters) ✅ 5981 ms (33 iters) ≈ -0.2% (±24.5%) ⚠️ W:3 / ⚠️ W:3
finagle-chirper 25 ✅ 5453 ms (36 iters) ✅ 5473 ms (36 iters) ≈ +0.4% (±24.3%) ⚠️ W:3 / ⚠️ W:3
fj-kmeans 21 ✅ 2709 ms (69 iters) ✅ 2820 ms (66 iters) 🔴 +4.1% — / —
fj-kmeans 25 ✅ 2824 ms (66 iters) ✅ 2811 ms (67 iters) ≈ -0.5% (±2.6%) — / —
future-genetic 21 ✅ 2119 ms (88 iters) ✅ 2065 ms (91 iters) 🟢 -2.5% — / —
future-genetic 25 ✅ 2069 ms (90 iters) ✅ 2067 ms (90 iters) ≈ -0.1% (±2.7%) — / —
naive-bayes 21 ✅ 1255 ms (136 iters) ✅ 1252 ms (136 iters) ≈ -0.2% (±32.4%) — / —
naive-bayes 25 ✅ 987 ms (172 iters) ✅ 1015 ms (168 iters) ≈ +2.8% (±32%) — / —
reactors 21 ✅ 16222 ms (15 iters) ✅ 16143 ms (15 iters) ≈ -0.5% (±6%) — / —
reactors 25 ✅ 18392 ms (15 iters) ✅ 18098 ms (15 iters) ≈ -1.6% (±4.3%) — / —
Internal counter details (ddprof)

ddprof internal counters, latest / dev (✅ = 0, · = unavailable):

Benchmark JDK Dropped rec Dropped jvmti Dropped trace Skipped WC AGCT fail Unwind fail
akka-uct 21 ✅ / ✅ ✅ / ✅ 2 / 2 1962 / 2002 ✅ / ✅ ✅ / ✅
akka-uct 25 ✅ / ✅ ✅ / ✅ 1 / 2 2398 / 2296 ✅ / ✅ ✅ / ✅
finagle-chirper 21 ✅ / ✅ ✅ / ✅ 4 / 2 8858 / 8495 ✅ / ✅ ✅ / ✅
finagle-chirper 25 ✅ / ✅ ✅ / ✅ 3 / 1 8731 / 8269 ✅ / ✅ ✅ / ✅
fj-kmeans 21 ✅ / ✅ ✅ / ✅ 1 / 2 1265 / 1253 ✅ / ✅ ✅ / ✅
fj-kmeans 25 ✅ / ✅ ✅ / ✅ 3 / ✅ 1276 / 1268 ✅ / ✅ ✅ / ✅
future-genetic 21 ✅ / ✅ ✅ / ✅ 2 / 2 2977 / 3050 ✅ / ✅ ✅ / ✅
future-genetic 25 ✅ / ✅ ✅ / ✅ 1 / ✅ 2888 / 2850 ✅ / ✅ ✅ / ✅
naive-bayes 21 ✅ / ✅ ✅ / ✅ 3 / 2 3488 / 3473 ✅ / ✅ ✅ / ✅
naive-bayes 25 ✅ / ✅ ✅ / ✅ 1 / ✅ 3456 / 3457 ✅ / ✅ ✅ / ✅
reactors 21 ✅ / ✅ ✅ / ✅ 1 / 1 1584 / 1669 ✅ / ✅ ✅ / ✅
reactors 25 ✅ / ✅ ✅ / ✅ ✅ / ✅ 1853 / 1794 ✅ / ✅ ✅ / ✅

@dd-octo-sts

dd-octo-sts Bot commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Benchmark Results (commit a8733ae)

Pipeline: https://gitlab.ddbuild.io/DataDog/apm-reliability/benchmarking-platform/-/pipelines/124292141 Commit: a8733ae6848ae4be905dd258707312d0bd12de1a

✅ Within expected boundaries

No significant runtime deltas (all within run-to-run noise) and no internal-counter outliers.

Runtime details (per benchmark × JDK)
Benchmark JDK Latest Dev Δ (dev vs latest) Issues L/D
akka-uct 21 ✅ 10245 ms (21 iters) ✅ 10340 ms (21 iters) ≈ +0.9% (±11.5%) — / —
akka-uct 25 ✅ 8818 ms (24 iters) ✅ 8779 ms (24 iters) ≈ -0.4% (±10%) — / —
finagle-chirper 21 ✅ 5970 ms (33 iters) ✅ 6025 ms (33 iters) ≈ +0.9% (±25.4%) ⚠️ W:3 / ⚠️ W:3
finagle-chirper 25 ✅ 5501 ms (36 iters) ✅ 5475 ms (36 iters) ≈ -0.5% (±24.1%) ⚠️ W:3 / ⚠️ W:4
fj-kmeans 25 ✅ 2745 ms (68 iters) ✅ 2818 ms (66 iters) ≈ +2.7% (±2.7%) — / —
future-genetic 21 ✅ 2070 ms (90 iters) ✅ 2042 ms (91 iters) ≈ -1.4% (±2.6%) — / —
future-genetic 25 ✅ 2053 ms (91 iters) ✅ 2056 ms (90 iters) ≈ +0.1% (±2.7%) — / —
naive-bayes 21 ✅ 1335 ms (128 iters) ✅ 1284 ms (134 iters) ≈ -3.8% (±31.9%) — / —
naive-bayes 25 ✅ 1022 ms (167 iters) ✅ 1019 ms (168 iters) ≈ -0.3% (±31.6%) — / —
reactors 21 ✅ 16107 ms (15 iters) ✅ 15446 ms (15 iters) ≈ -4.1% (±7.5%) — / —
reactors 25 ✅ 18069 ms (15 iters) ✅ 17692 ms (15 iters) ≈ -2.1% (±5.2%) — / —
Internal counter details (ddprof)

ddprof internal counters, latest / dev (✅ = 0, · = unavailable):

Benchmark JDK Dropped rec Dropped jvmti Dropped trace Skipped WC AGCT fail Unwind fail
akka-uct 21 ✅ / ✅ ✅ / ✅ 3 / ✅ 2000 / 1976 ✅ / ✅ ✅ / ✅
akka-uct 25 ✅ / ✅ ✅ / ✅ 1 / 2 2139 / 2204 ✅ / ✅ ✅ / ✅
finagle-chirper 21 ✅ / ✅ ✅ / ✅ 2 / 2 8266 / 8450 ✅ / ✅ ✅ / ✅
finagle-chirper 25 ✅ / ✅ ✅ / ✅ ✅ / ✅ 8295 / 8256 ✅ / ✅ ✅ / ✅
fj-kmeans 21 ✅ / ✅ ✅ / ✅ 2 / ✅ 1250 / 1257 ✅ / ✅ ✅ / ✅
fj-kmeans 25 ✅ / ✅ ✅ / ✅ 1 / 3 1263 / 1258 ✅ / ✅ ✅ / ✅
future-genetic 21 ✅ / ✅ ✅ / ✅ 1 / 3 2981 / 2921 ✅ / ✅ ✅ / ✅
future-genetic 25 ✅ / ✅ ✅ / ✅ 1 / 4 2928 / 2898 ✅ / ✅ ✅ / ✅
naive-bayes 21 ✅ / ✅ ✅ / ✅ 3 / 3 3483 / 3503 ✅ / ✅ ✅ / ✅
naive-bayes 25 ✅ / ✅ ✅ / ✅ 5 / 5 3479 / 3470 ✅ / ✅ ✅ / ✅
reactors 21 ✅ / ✅ ✅ / ✅ ✅ / 2 1649 / 1523 ✅ / ✅ ✅ / ✅
reactors 25 ✅ / ✅ ✅ / ✅ ✅ / ✅ 1878 / 1718 ✅ / ✅ ✅ / ✅

@datadog-prod-us1-5

This comment has been minimized.

lookupDuringDump() had no size check, so the JFR dump path could still
grow _class_map past the cap Profiler::lookupClass() enforces at
sample time.
@dd-octo-sts

dd-octo-sts Bot commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Benchmark Results (commit e3224fd)

Pipeline: https://gitlab.ddbuild.io/DataDog/apm-reliability/benchmarking-platform/-/pipelines/124307330 Commit: e3224fd235b8ec964d26e7d6b86a93f415df6a9a

✅ Within expected boundaries

No significant runtime deltas (all within run-to-run noise) and no internal-counter outliers.

Runtime details (per benchmark × JDK)
Benchmark JDK Latest Dev Δ (dev vs latest) Issues L/D
akka-uct 21 ✅ 10224 ms (21 iters) ✅ 10311 ms (21 iters) ≈ +0.9% (±11.3%) — / —
akka-uct 25 ✅ 8835 ms (24 iters) ✅ 8766 ms (24 iters) ≈ -0.8% (±9.8%) — / —
finagle-chirper 21 ✅ 5914 ms (33 iters) ✅ 6024 ms (33 iters) ≈ +1.9% (±25.7%) ⚠️ W:3 / ⚠️ W:3
finagle-chirper 25 ✅ 5495 ms (36 iters) ✅ 5477 ms (36 iters) ≈ -0.3% (±24.1%) ⚠️ W:3 / ⚠️ W:3
fj-kmeans 21 ✅ 2692 ms (70 iters) ✅ 2638 ms (72 iters) ≈ -2% (±2.6%) — / —
fj-kmeans 25 ✅ 2806 ms (67 iters) ✅ 2821 ms (66 iters) ≈ +0.5% (±2.6%) — / —
future-genetic 21 ✅ 2048 ms (90 iters) ✅ 2045 ms (91 iters) ≈ -0.1% (±2.6%) — / —
future-genetic 25 ✅ 2002 ms (93 iters) ✅ 2029 ms (91 iters) ≈ +1.3% (±2.6%) — / —
naive-bayes 21 ✅ 1254 ms (137 iters) ✅ 1273 ms (134 iters) ≈ +1.5% (±32.7%) — / —
naive-bayes 25 ✅ 1017 ms (168 iters) ✅ 1019 ms (167 iters) ≈ +0.2% (±32.1%) — / —
reactors 21 ✅ 16272 ms (15 iters) ✅ 15761 ms (15 iters) ≈ -3.1% (±6.5%) — / —
reactors 25 ✅ 18361 ms (15 iters) ✅ 18096 ms (15 iters) ≈ -1.4% (±4.5%) — / —
Internal counter details (ddprof)

ddprof internal counters, latest / dev (✅ = 0, · = unavailable):

Benchmark JDK Dropped rec Dropped jvmti Dropped trace Skipped WC AGCT fail Unwind fail
akka-uct 21 ✅ / ✅ ✅ / ✅ 3 / 1 1924 / 1955 ✅ / ✅ ✅ / ✅
akka-uct 25 ✅ / ✅ ✅ / ✅ 3 / ✅ 2236 / 2298 ✅ / ✅ ✅ / ✅
finagle-chirper 21 ✅ / ✅ ✅ / ✅ 4 / 1 8290 / 9001 ✅ / ✅ ✅ / ✅
finagle-chirper 25 ✅ / ✅ ✅ / ✅ 1 / 1 8589 / 8433 ✅ / ✅ ✅ / ✅
fj-kmeans 21 ✅ / ✅ ✅ / ✅ 3 / 1 1262 / 1298 ✅ / ✅ ✅ / ✅
fj-kmeans 25 ✅ / ✅ ✅ / ✅ 1 / 7 1303 / 1305 ✅ / ✅ ✅ / ✅
future-genetic 21 ✅ / ✅ ✅ / ✅ 2 / 2 2845 / 3048 ✅ / ✅ ✅ / ✅
future-genetic 25 ✅ / ✅ ✅ / ✅ 3 / 2 2860 / 2739 ✅ / ✅ ✅ / ✅
naive-bayes 21 ✅ / ✅ ✅ / ✅ 2 / 5 3517 / 3472 ✅ / ✅ ✅ / ✅
naive-bayes 25 ✅ / ✅ ✅ / ✅ 5 / 4 3508 / 3480 ✅ / ✅ ✅ / ✅
reactors 21 ✅ / ✅ ✅ / ✅ 1 / 1 1551 / 1572 ✅ / ✅ ✅ / ✅
reactors 25 ✅ / ✅ ✅ / ✅ ✅ / ✅ 1896 / 1852 ✅ / ✅ ✅ / ✅

@dd-octo-sts

dd-octo-sts Bot commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Reliability & Chaos Results

All reliability & chaos checks passed Pipeline: https://gitlab.ddbuild.io/DataDog/java-profiler/-/pipelines/124366851

thread-churn/dump-storm antagonists cycle many short-lived threads;
tcmalloc's defaults are slow to return per-thread caches to the OS,
inflating container RSS past the OOM limit on aarch64.

Reproduced under a 3GB memory.max cgroup on aarch64 (tcmalloc,
profiler+tracer, JDK 25.0.3, 120s): baseline OOM-killed (oom_kill=1,
RC=137); with TCMALLOC_RELEASE_RATE=10 + TCMALLOC_AGGRESSIVE_DECOMMIT=1
the same run completes cleanly (RC=0).
@dd-octo-sts

dd-octo-sts Bot commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Benchmark Results (commit 3397ec1)

Pipeline: https://gitlab.ddbuild.io/DataDog/apm-reliability/benchmarking-platform/-/pipelines/124366869 Commit: 3397ec17e43e5c5dc8c53d534562e2d4c8d97852

⚠️ Significant outliers

  • 🔴 fj-kmeans (JDK 21): runtime +5.5% (2696→2845 ms)
  • 🔴 future-genetic (JDK 25): runtime +4.4% (2000→2087 ms)
Runtime details (per benchmark × JDK)
Benchmark JDK Latest Dev Δ (dev vs latest) Issues L/D
akka-uct 21 ✅ 10328 ms (21 iters) ✅ 10289 ms (21 iters) ≈ -0.4% (±12%) — / —
akka-uct 25 ✅ 8839 ms (24 iters) ✅ 8977 ms (24 iters) ≈ +1.6% (±9.5%) — / —
finagle-chirper 21 ✅ 6015 ms (33 iters) ✅ 6007 ms (33 iters) ≈ -0.1% (±25.2%) ⚠️ W:3 / ⚠️ W:3
finagle-chirper 25 ✅ 5496 ms (36 iters) ✅ 5436 ms (36 iters) ≈ -1.1% (±24.5%) ⚠️ W:3 / ⚠️ W:3
fj-kmeans 21 ✅ 2696 ms (70 iters) ✅ 2845 ms (66 iters) 🔴 +5.5% — / —
fj-kmeans 25 ✅ 2826 ms (66 iters) ✅ 2819 ms (66 iters) ≈ -0.2% (±2.5%) — / —
future-genetic 21 ✅ 2069 ms (90 iters) ✅ 2099 ms (90 iters) ≈ +1.4% (±2.6%) — / —
future-genetic 25 ✅ 2000 ms (93 iters) ✅ 2087 ms (90 iters) 🔴 +4.4% — / —
naive-bayes 21 ✅ 1226 ms (139 iters) ✅ 1256 ms (136 iters) ≈ +2.4% (±32.8%) — / —
naive-bayes 25 ✅ 977 ms (174 iters) ✅ 1024 ms (167 iters) ≈ +4.8% (±32.9%) — / —
reactors 21 ✅ 16384 ms (15 iters) ✅ 16737 ms (15 iters) ≈ +2.2% (±8.6%) — / —
reactors 25 ✅ 18760 ms (15 iters) ✅ 18803 ms (15 iters) ≈ +0.2% (±4.9%) — / —
Internal counter details (ddprof)

ddprof internal counters, latest / dev (✅ = 0, · = unavailable):

Benchmark JDK Dropped rec Dropped jvmti Dropped trace Skipped WC AGCT fail Unwind fail
akka-uct 21 ✅ / ✅ ✅ / ✅ 3 / 2 1989 / 1899 ✅ / ✅ ✅ / ✅
akka-uct 25 ✅ / ✅ ✅ / ✅ 1 / ✅ 2193 / 2216 ✅ / ✅ ✅ / ✅
finagle-chirper 21 ✅ / ✅ ✅ / ✅ 5 / 2 8733 / 8665 ✅ / ✅ ✅ / ✅
finagle-chirper 25 ✅ / ✅ ✅ / ✅ 1 / 1 8400 / 8231 ✅ / ✅ ✅ / ✅
fj-kmeans 21 ✅ / ✅ ✅ / ✅ 2 / 4 1293 / 1266 ✅ / ✅ ✅ / ✅
fj-kmeans 25 ✅ / ✅ ✅ / ✅ 1 / 8 1287 / 1263 ✅ / ✅ ✅ / ✅
future-genetic 21 ✅ / ✅ ✅ / ✅ 2 / 2 2914 / 3021 ✅ / ✅ ✅ / ✅
future-genetic 25 ✅ / ✅ ✅ / ✅ 2 / ✅ 2845 / 2962 ✅ / ✅ ✅ / ✅
naive-bayes 21 ✅ / ✅ ✅ / ✅ 4 / 4 3538 / 3496 ✅ / ✅ ✅ / ✅
naive-bayes 25 ✅ / ✅ ✅ / ✅ 8 / 6 3491 / 3500 ✅ / ✅ ✅ / ✅
reactors 21 ✅ / ✅ ✅ / ✅ 2 / 2 1689 / 1697 ✅ / ✅ ✅ / ✅
reactors 25 ✅ / ✅ ✅ / ✅ 1 / 2 1961 / 1945 ✅ / ✅ ✅ / ✅

@jbachorik jbachorik merged commit 4e0e178 into main Jul 13, 2026
230 checks passed
@jbachorik jbachorik deleted the jb/reliability-chaos-oom branch July 13, 2026 17:45
@github-actions github-actions Bot added this to the 1.47.0 milestone Jul 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants