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 The first line of this file holds the git revision number of the last
merge done from the gofrontend repository. merge done from the gofrontend repository.

View File

@ -563,6 +563,14 @@ func schedinit() {
sched.lastpoll = uint64(nanotime()) sched.lastpoll = uint64(nanotime())
procs := ncpu 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 { if n, ok := atoi32(gogetenv("GOMAXPROCS")); ok && n > 0 {
procs = n procs = n
} }