Skip to content

Reduce default node idle timeout from 15 minutes to 30 seconds#13356

Closed
JakeRadMSFT wants to merge 1 commit intodotnet:mainfrom
JakeRadMSFT:fix/reduce-idle-timeout
Closed

Reduce default node idle timeout from 15 minutes to 30 seconds#13356
JakeRadMSFT wants to merge 1 commit intodotnet:mainfrom
JakeRadMSFT:fix/reduce-idle-timeout

Conversation

@JakeRadMSFT
Copy link
Copy Markdown
Member

@JakeRadMSFT JakeRadMSFT commented Mar 10, 2026

Problem

Idle MSBuild worker nodes linger for 15 minutes (DefaultNodeConnectionTimeout), consuming memory and PIDs. On macOS with 12 cores, a single solution build can leave 10+ idle nodes resident for 15 minutes. With 5-10 concurrent builds this compounds to 50-100+ idle nodes.

Change

Reduce DefaultNodeConnectionTimeout from 15 minutes to 30 seconds.

30 seconds is long enough to keep nodes warm for incremental rebuilds (the common dev loop) while reclaiming resources much sooner.

Note: src/MSBuildTaskHost/CommunicationsUtilities.cs has a separate copy of this timeout — it still defaults to 15 minutes. The TaskHost only runs on .NET Framework/Windows where the impact is different.

This is a behavioral change split out from #13336 for separate discussion per @baronfel's request.

Copilot AI review requested due to automatic review settings March 10, 2026 06:44
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR reduces the default amount of time MSBuild worker nodes will wait for a host connection (and therefore remain alive when idle) from 15 minutes to 30 seconds, improving resource reclamation on machines that spawn many nodes (notably macOS/Unix scenarios).

Changes:

  • Lowered DefaultNodeConnectionTimeout default from 900,000ms (15 min) to 30,000ms (30 sec).

Comment thread src/Shared/CommunicationsUtilities.cs Outdated
Idle MSBuild worker nodes currently linger for 15 minutes, consuming
memory and PIDs. On macOS with 12 cores, a single solution build can
leave 10+ idle nodes resident for 15 minutes. With concurrent builds
(e.g. repo tooling), this compounds to 100+ idle nodes.

30 seconds is long enough to keep nodes warm for incremental rebuilds
(the common dev loop) while reclaiming resources much sooner.

This is a behavioral change that warrants discussion — split out from
the other Unix node reuse bugfixes per reviewer request.
@JakeRadMSFT JakeRadMSFT force-pushed the fix/reduce-idle-timeout branch from 3c85c5d to 1766d42 Compare March 10, 2026 07:02
@danmoseley
Copy link
Copy Markdown
Member

danmoseley commented Mar 14, 2026

End of an era, glad to see this. Particularly in the age of Copilot CLI which can be doing several full builds concurrently as it works on bugs concurrently, leaving me with 100 idle processes.

@danmoseley
Copy link
Copy Markdown
Member

@JakeRadMSFT just curious are you still planning to do this? For reasons above I suspect concurrent builds will be more common so it will be even more valuable to do it now.

@rainersigwald
Copy link
Copy Markdown
Member

End of an era, glad to see this. Particularly in the age of Copilot CLI which can be doing several full builds concurrently as it works on bugs concurrently, leaving me with 100 idle processes.

You shouldn't see this any more as of 10.0.3xx+, independent of this change--that's influenced by #13220.

I don't think we have the evidence required to make this change.

@danmoseley
Copy link
Copy Markdown
Member

danmoseley commented Apr 20, 2026

OK, I'll see how things are with #13220. I periodically get 10GB of dotnet's, if I still see this I'll investigate and share.

Another change suggested in the past is for each child to hook into low memory notification when idle.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants