Repository navigation
Test failure: GC/Features/HeapExpansion/bestfit-finalize/bestfit-finalize.cmd #132107
Copy link
Copy link
Open
Labels
Known Build ErrorUse this to report build issues in the .NET Helix tabUse this to report build issues in the .NET Helix tabarea-CodeGen-coreclrCLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMICLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMIblocking-clean-ci-optionalBlocking optional rolling runsBlocking optional rolling runsblocking-outerloopBlocking the 'runtime-coreclr outerloop' and 'runtime-libraries-coreclr outerloop' runsBlocking the 'runtime-coreclr outerloop' and 'runtime-libraries-coreclr outerloop' runs
Milestone
Description
Failed in: runtime-coreclr outerloop 20260809.3
Failed tests:
coreclr browser wasm Checked no_tiered_compilation @ (Ubuntu.2604.Amd64.Open)AzureLinux.3.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-26.04-helix-webassembly-amd64@sha256:0be8725e08b6d0f58ec0290f3f3b70c449123e78b2b33853e9049df84b912fa8
- GC/Features/HeapExpansion/bestfit-finalize/bestfit-finalize.cmd
Error message:
Out-of-process wrapper failed with exit code 1.
BEGIN EXECUTION
Running with node
CORE_ROOT: /root/helix/work/correlation
ExePath: /root/helix/work/workitem/e/GC/Features/HeapExpansion/bestfit-finalize/bestfit-finalize.dll
CLRTestExecutionArguments:
node version: v23.11.1
Timeout in ms: 900000
Running: node --experimental-wasm-exnref --stack-size=8192 /root/helix/work/correlation/corerun.js -c /root/helix/work/correlation -p System.Reflection.Metadata.MetadataUpdater.IsSupported=false -p System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization=true /root/helix/work/workitem/e/GC/Features/HeapExpansion/bestfit-finalize/bestfit-finalize.dll
Using defaults: 1 1200 100000
Using random seed: 246730784
Took 13950 iterations to reach steady state
OOM
3841357900
Test Failed
Kill watchdog with PID 225
Expected: 100
Actual: 1
END EXECUTION - FAILED
Stack trace:
at Xunit.Assert.True(Nullable`1 condition, String userMessage) in /_/src/arcade/src/Microsoft.DotNet.XUnitAssert/src/BooleanAsserts.cs:line 135
at Xunit.Assert.True(Boolean condition, String userMessage) in /_/src/arcade/src/Microsoft.DotNet.XUnitAssert/src/BooleanAsserts.cs:line 117
at TestLibrary.OutOfProcessTest.ImportPrecomputedResult(String assemblyPath, String testPathPrefix) in /__w/1/s/src/tests/Common/CoreCLRTestLibrary/OutOfProcessTest.cs:line 285
at TestLibrary.OutOfProcessTest.RunOutOfProcessTest(String assemblyPath, String testPathPrefix) in /__w/1/s/src/tests/Common/CoreCLRTestLibrary/OutOfProcessTest.cs:line 84
at Program.<<Main>$>g__TestExecutor15|0_16(StreamWriter tempLogSw, StreamWriter statsCsvSw, StreamWriter outOfProcessPlanWriter, <>c__DisplayClass0_0&)
Known Issue Error Message
DO NOT USE JSON BELOW IF THIS IS A BUILD BREAK otherwise build analysis will allow pull requests to merge that break the build worse. For a build break, do not use this issue form. Make a regular new issue.
Fill the error message using step by step known issues guidance.
{
"ErrorMessage": "Failed test: GC/Features/HeapExpansion/bestfit-finalize",
"ErrorPattern": "",
"BuildRetry": false,
"ExcludeConsoleLog": false
}Known issue validation
Build: 🔎 https://dev.azure.com/dnceng-public/public/_build/results?buildId=1545892
Error message validated: [Failed test: GC/Features/HeapExpansion/bestfit-finalize]
Result validation: ✅ Known issue matched with the provided build.
Validation performed at: 8/24/2026 11:48:43 AM UTC
Report
| Build | Repository | Test | Pull Request |
|---|---|---|---|
| 1641274 | dotnet/runtime | GC/Features/HeapExpansion/bestfit-finalize/bestfit-finalize.cmd | |
| 1640303 | dotnet/runtime | GC/Features/HeapExpansion/bestfit-finalize/bestfit-finalize.cmd | #136077 |
| 1640439 | dotnet/runtime | GC/Features/HeapExpansion/bestfit-finalize/bestfit-finalize.cmd | #136080 |
| 1637158 | dotnet/runtime | GC/Features/HeapExpansion/bestfit-finalize/bestfit-finalize.cmd | |
| 1633691 | dotnet/runtime | GC/Features/HeapExpansion/bestfit-finalize/bestfit-finalize.cmd | |
| 1630399 | dotnet/runtime | GC/Features/HeapExpansion/bestfit-finalize/bestfit-finalize.cmd | #135541 |
| 1628720 | dotnet/runtime | GC/Features/HeapExpansion/bestfit-finalize/bestfit-finalize.cmd | |
| 1621260 | dotnet/runtime | GC/Features/HeapExpansion/bestfit-finalize/bestfit-finalize.cmd | #135105 |
Summary
| 24-Hour Hit Count | 7-Day Hit Count | 1-Month Count |
|---|---|---|
| 0 | 0 | 8 |
Metadata
Metadata
Assignees
Labels
Known Build ErrorUse this to report build issues in the .NET Helix tabUse this to report build issues in the .NET Helix tabarea-CodeGen-coreclrCLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMICLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMIblocking-clean-ci-optionalBlocking optional rolling runsBlocking optional rolling runsblocking-outerloopBlocking the 'runtime-coreclr outerloop' and 'runtime-libraries-coreclr outerloop' runsBlocking the 'runtime-coreclr outerloop' and 'runtime-libraries-coreclr outerloop' runs
Activity
dotnet-policy-service commentedon Aug 11, 2026
Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch
See info in area-owners.md if you want to be subscribed.
JulieLeeMSFT commentedon Aug 27, 2026
@AndyAyersMS, this failure is affecting many pipelines. PTAL.
tannergooding commentedon Sep 12, 2026
The browser CoreCLR OOM is reproducible and appears to be finalizer starvation, rather than excessive live-request memory or a timeout.
I replayed the normal/non-R2R failure from build 1593908 on #133774 using the original test DLL and browser Wasm Checked runtime from its GC-features Helix payload. The local host was Windows with Node 23.11.1 and tiering disabled, matching the CI Node version and scenario, but not its Linux container.
With unchanged arguments
1 1200 100000 1094640032, the original binary reaches steady state after 15,970 requests, then throws OOM withGC.GetTotalMemory(false)reporting 3,841,467,072 bytes. The CI log reports 3,841,067,724 bytes.The relevant scheduling behavior is:
Requestretains its survivor arrays and a pinnedGCHandle; its finalizer releases the handle.Go()synchronously constructs requests until five times the steady-state count: 79,850 for this seed.FinalizerThread::EnableFinalizationdefers execution to the host.SystemJS_ScheduleFinalizationusessafeSetTimeout(..., 0).An instrumented copy counted completed constructors and finalizers (the latter after
pin.Free()), sampling memory once per 1,200 requests:The control performed 291 full collections without executing a single
Requestfinalizer. The drain run still used natural collections; noGC.Collect()was added. The sampled maximum is not a continuous peak measurement, and the finalizer counts were observed before post-loop cleanup.An applicable test workaround is to add this immediately after
requests[i] = new Request():On this runtime,
WaitForPendingFinalizersdrains synchronously outside the collection; it does not require returning to JavaScript. This preserves the random sequence, request count, allocation volume, survivor selection, pinning, and existing success/failure conditions.The uninstrumented workaround passed the failing seed, seed
0, and a two-outer-iteration run with the original1200 100000workload. Original and patched versions also passed on desktop. These were direct test-source compilations against the downloaded CI runtime, not a fresh runtime build or a rerun of the full Helix harness.This is a workaround for the test, not a general runtime fix: ordinary synchronous user allocation loops can encounter the same lack of finalizer progress. The reproduced failure is on CoreCLR Wasm; these experiments do not establish Mono Wasm behavior or a RyuJIT codegen defect.
Note
This analysis and workaround were drafted by GitHub Copilot from source inspection and local reproduction results.
Drain finalizers periodically in bestfit-finalize when multithreading…
lewing commentedon Oct 1, 2026
reopening temporarily to let ci clear