runtime: on 32-bit systems, limit default GOMAXPROCS to 32

Otherwise we can easily run out of stack space for threads.

The user can still override by setting GOMAXPROCS.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/219278
This commit is contained in:
Ian Lance Taylor 2020-02-12 20:35:50 -08:00
parent 5599262661
commit 17edb3310d
2 changed files with 9 additions and 1 deletions

View File

@ -1,4 +1,4 @@
c94637ad6fd38d4814fb02d094a1a73f19323d71
3e46519cee5c916a9b39480fbac13f4ffc6a93b0
The first line of this file holds the git revision number of the last
merge done from the gofrontend repository.

View File

@ -563,6 +563,14 @@ func schedinit() {
sched.lastpoll = uint64(nanotime())
procs := ncpu
// In 32-bit mode, we can burn a lot of memory on thread stacks.
// Try to avoid this by limiting the number of threads we run
// by default.
if sys.PtrSize == 4 && procs > 32 {
procs = 32
}
if n, ok := atoi32(gogetenv("GOMAXPROCS")); ok && n > 0 {
procs = n
}