Reduce default node idle timeout from 15 minutes to 30 seconds#13356
Reduce default node idle timeout from 15 minutes to 30 seconds#13356JakeRadMSFT wants to merge 1 commit intodotnet:mainfrom
Conversation
There was a problem hiding this comment.
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
DefaultNodeConnectionTimeoutdefault from 900,000ms (15 min) to 30,000ms (30 sec).
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.
3c85c5d to
1766d42
Compare
|
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. |
|
@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. |
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. |
|
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. |
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
DefaultNodeConnectionTimeoutfrom 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.cshas 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.