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
Summary
| 24-Hour Hit Count | 7-Day Hit Count | 1-Month Count |
|---|---|---|
| 0 | 2 | 97 |
Reactions are currently unavailable
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