You probably need multiple pools in and partition them. 500k accessors of a shared lock is going to have contention.
github.com/robaho/go-concurrency-test might be helpful. > On Jun 17, 2021, at 11:19 AM, Peter Z <zjy19871...@gmail.com> wrote: > > > The original post is on stackoverflow > https://stackoverflow.com/questions/67999117/unexpected-stuck-in-sync-pool-get > > Golang ENV: > go1.14.3 linux/amd64 > > Description: > We have about half a million agents running on each of our machines.The agent > is written in Go. Recently we found that the agent may get stuck, no response > for the sent requests. The metrics exported from the agent show that a > channel in the agent(caching the request) is full. Deep into the goroutine > stacks, we found that the goroutines consuming messages from the channel are > all waiting for a lock.The goroutines Stack details are shown below. > > // Consuming Goroutine > 166 @ 0x438cd0 0x4497e0 0x4497cb 0x449547 0x481c1c 0x482792 0x482793 > 0x4824ee 0x4821af 0x520ebd 0x51fdff 0x51fcd0 0x737fb4 0x73a836 0x73a813 > 0x97d660 0x97d60a 0x97d5e9 0x4689e1 > # 0x449546 sync.runtime_SemacquireMutex+0x46 > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/******/go-env/go1-14-linux-amd64/src/runtime/sema.go:71 > # 0x481c1b sync.(*Mutex).lockSlow+0xfb > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/******/go-env/go1-14-linux-amd64/src/sync/mutex.go:138 > # 0x482791 sync.(*Mutex).Lock+0x271 > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/******/go-env/go1-14-linux-amd64/src/sync/mutex.go:81 > # 0x482792 sync.(*Pool).pinSlow+0x272 > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/******/go-env/go1-14-linux-amd64/src/sync/pool.go:213 > # 0x4824ed sync.(*Pool).pin+0x5d > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/******/go-env/go1-14-linux-amd64/src/sync/pool.go:206 > # 0x4821ae sync.(*Pool).Get+0x2e > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/******/go-env/go1-14-linux-amd64/src/sync/pool.go:128 > # 0x520ebc go.uber.org/zap/zapcore.getCheckedEntry+0x2c > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/pkg/mod/go.uber.org/zap@v1.9.1/zapcore/entry.go:45 > # 0x51fdfe > go.uber.org/zap/zapcore.(*CheckedEntry).AddCore+0x18e > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/pkg/mod/go.uber.org/zap@v1.9.1/zapcore/entry.go:240 > # 0x51fccf go.uber.org/zap/zapcore.(*ioCore).Check+0x5f > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/pkg/mod/go.uber.org/zap@v1.9.1/zapcore/core.go:80 > # 0x737fb3 go.uber.org/zap.(*Logger).check+0x153 > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/pkg/mod/go.uber.org/zap@v1.9.1/logger.go:269 > # 0x73a835 go.uber.org/zap.(*Logger).Check+0x85 > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/pkg/mod/go.uber.org/zap@v1.9.1/logger.go:172 > # 0x73a812 go.uber.org/zap.(*SugaredLogger).log+0x62 > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/pkg/mod/go.uber.org/zap@v1.9.1/sugar.go:233 > # 0x97d65f go.uber.org/zap.(*SugaredLogger).Infof+0x30f > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/pkg/mod/go.uber.org/zap@v1.9.1/sugar.go:138 > # 0x97d609 ******/log.Infof+0x2b9 > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/pkg/mod/******/common@v0.0.0-20210323102343-4a6074e63e74/log/log.go:71 > # 0x97d5e8 ******/api.(*xxHeadServer).workerProcMsg+0x298 > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/******/xxhead_server.go:350 > > // Consuming Goroutine > 119 @ 0x438cd0 0x4497e0 0x4497cb 0x449547 0x481c1c 0x482792 0x482793 > 0x4824ee 0x4821af 0x5269e1 0x5269d2 0x526892 0x51f6cd 0x51f116 0x51ff39 > 0x5218e7 0x73a8b0 0x97d660 0x97d60a 0x97d5e9 0x4689e1 > # 0x449546 sync.runtime_SemacquireMutex+0x46 > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/******/go-env/go1-14-linux-amd64/src/runtime/sema.go:71 > # 0x481c1b sync.(*Mutex).lockSlow+0xfb > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/******/go-env/go1-14-linux-amd64/src/sync/mutex.go:138 > # 0x482791 sync.(*Mutex).Lock+0x271 > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/******/go-env/go1-14-linux-amd64/src/sync/mutex.go:81 > # 0x482792 sync.(*Pool).pinSlow+0x272 > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/******/go-env/go1-14-linux-amd64/src/sync/pool.go:213 > # 0x4824ed sync.(*Pool).pin+0x5d > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/******/go-env/go1-14-linux-amd64/src/sync/pool.go:206 > # 0x4821ae sync.(*Pool).Get+0x2e > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/******/go-env/go1-14-linux-amd64/src/sync/pool.go:128 > # 0x5269e0 go.uber.org/zap/zapcore.getJSONEncoder+0x30 > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/pkg/mod/go.uber.org/zap@v1.9.1/zapcore/json_encoder.go:43 > # 0x5269d1 go.uber.org/zap/zapcore.(*jsonEncoder).clone+0x21 > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/pkg/mod/go.uber.org/zap@v1.9.1/zapcore/json_encoder.go:300 > # 0x526891 go.uber.org/zap/zapcore.(*jsonEncoder).Clone+0x31 > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/pkg/mod/go.uber.org/zap@v1.9.1/zapcore/json_encoder.go:294 > # 0x51f6cc > go.uber.org/zap/zapcore.consoleEncoder.writeContext+0x4c > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/pkg/mod/go.uber.org/zap@v1.9.1/zapcore/console_encoder.go:128 > # 0x51f115 > go.uber.org/zap/zapcore.consoleEncoder.EncodeEntry+0x3d5 > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/pkg/mod/go.uber.org/zap@v1.9.1/zapcore/console_encoder.go:110 > # 0x51ff38 go.uber.org/zap/zapcore.(*ioCore).Write+0xa8 > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/pkg/mod/go.uber.org/zap@v1.9.1/zapcore/core.go:86 > # 0x5218e6 > go.uber.org/zap/zapcore.(*CheckedEntry).Write+0x116 > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/pkg/mod/go.uber.org/zap@v1.9.1/zapcore/entry.go:215 > # 0x73a8af go.uber.org/zap.(*SugaredLogger).log+0xff > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/pkg/mod/go.uber.org/zap@v1.9.1/sugar.go:234 > # 0x97d65f go.uber.org/zap.(*SugaredLogger).Infof+0x30f > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/pkg/mod/go.uber.org/zap@v1.9.1/sugar.go:138 > # 0x97d609 ******/log.Infof+0x2b9 > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/pkg/mod/******/common@v0.0.0-20210323102343-4a6074e63e74/log/log.go:71 > # 0x97d5e8 ******/api.(*xxHeadServer).workerProcMsg+0x298 > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/******/xxhead_server.go:350 > > // Consuming Goroutine > 59 @ 0x438cd0 0x4497e0 0x4497cb 0x449547 0x481c1c 0x482792 0x482793 > 0x4824ee 0x4821af 0x4d8291 0x4d5726 0x9857f7 0x9804ca 0x97d5d5 0x4689e1 > # 0x449546 sync.runtime_SemacquireMutex+0x46 > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/******/go-env/go1-14-linux-amd64/src/runtime/sema.go:71 > # 0x481c1b sync.(*Mutex).lockSlow+0xfb > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/******/go-env/go1-14-linux-amd64/src/sync/mutex.go:138 > # 0x482791 sync.(*Mutex).Lock+0x271 > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/******/go-env/go1-14-linux-amd64/src/sync/mutex.go:81 > # 0x482792 sync.(*Pool).pinSlow+0x272 > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/******/go-env/go1-14-linux-amd64/src/sync/pool.go:213 > # 0x4824ed sync.(*Pool).pin+0x5d > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/******/go-env/go1-14-linux-amd64/src/sync/pool.go:206 > # 0x4821ae sync.(*Pool).Get+0x2e > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/******/go-env/go1-14-linux-amd64/src/sync/pool.go:128 > # 0x4d8290 fmt.newPrinter+0x30 > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/******/go-env/go1-14-linux-amd64/src/fmt/print.go:137 > # 0x4d5725 fmt.Errorf+0x25 > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/******/go-env/go1-14-linux-amd64/src/fmt/errors.go:18 > # 0x9857f6 ******/api.(*xxHeadServer).parseDataName+0xc36 > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/******/xxhead_server.go:1731 > # 0x9804c9 > ******/api.(*xxHeadServer).procLocalServiceConfReq+0xc9 > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/******/xxhead_server.go:742 > # 0x97d5d4 ******/api.(*xxHeadServer).workerProcMsg+0x284 > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/******/xxhead_server.go:349 > > // Another 10 Goroutines not consuming the messages in channel, > // but also get stuck in the sync.(*Pool).Get method > 10 @ 0x438cd0 0x4497e0 0x4497cb 0x449547 0x481c1c 0x482792 0x482793 > 0x4824ee 0x4821af 0x4d8291 0x4d8856 0x9761b6 0x4689e1 > # 0x449546 sync.runtime_SemacquireMutex+0x46 > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/******/go-env/go1-14-linux-amd64/src/runtime/sema.go:71 > # 0x481c1b sync.(*Mutex).lockSlow+0xfb > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/******/go-env/go1-14-linux-amd64/src/sync/mutex.go:138 > # 0x482791 sync.(*Mutex).Lock+0x271 > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/******/go-env/go1-14-linux-amd64/src/sync/mutex.go:81 > # 0x482792 sync.(*Pool).pinSlow+0x272 > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/******/go-env/go1-14-linux-amd64/src/sync/pool.go:213 > # 0x4824ed sync.(*Pool).pin+0x5d > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/******/go-env/go1-14-linux-amd64/src/sync/pool.go:206 > # 0x4821ae sync.(*Pool).Get+0x2e > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/******/go-env/go1-14-linux-amd64/src/sync/pool.go:128 > # 0x4d8290 fmt.newPrinter+0x30 > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/******/go-env/go1-14-linux-amd64/src/fmt/print.go:137 > # 0x4d8855 fmt.Sprintf+0x25 > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/******/go-env/go1-14-linux-amd64/src/fmt/print.go:218 > # 0x9761b5 > ******/datainfect.(*Infector).workerPushVersion+0x225 > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/******/datainfect.go:93 > > One of the goroutine detail is here, odd 4581 minutes. > > goroutine 6295 [semacquire, 4581 minutes]: > sync.runtime_SemacquireMutex(0x107aa64, 0x0, 0x1) > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/******/go-env/go1-14-linux-amd64/src/runtime/sema.go:71 > +0x47 > sync.(*Mutex).lockSlow(0x107aa60) > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/******/go-env/go1-14-linux-amd64/src/sync/mutex.go:138 > +0xfc > sync.(*Mutex).Lock(...) > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/******/go-env/go1-14-linux-amd64/src/sync/mutex.go:81 > sync.(*Pool).pinSlow(0x103dea0, 0x0, 0x0) > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/******/go-env/go1-14-linux-amd64/src/sync/pool.go:213 > +0x272 > sync.(*Pool).pin(0x103dea0, 0xc00a258020, 0x10) > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/******/go-env/go1-14-linux-amd64/src/sync/pool.go:206 > +0x5e > sync.(*Pool).Get(0x103dea0, 0x20, 0x9f61e0) > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/******/go-env/go1-14-linux-amd64/src/sync/pool.go:128 > +0x2f > fmt.newPrinter(0xc002b18900) > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/******/go-env/go1-14-linux-amd64/src/fmt/print.go:137 > +0x31 > fmt.Errorf(0xb00213, 0x18, 0xc007629d98, 0x1, 0x1, 0x1, 0xc00a39e020) > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/******/go-env/go1-14-linux-amd64/src/fmt/errors.go:18 > +0x26 > ******/api.(*xxHeadServer).parseDataName(0xc0006ae080, 0xc00a244000, > 0xc00a200060, 0x1f) > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/******/xxhead_server.go:1731 > +0xc37 > ******/api.(*xxHeadServer).procLocalServiceConfReq(0xc0006ae080, > 0xc00a244000, 0x0, 0x0) > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/******/xxhead_server.go:742 > +0xca > ******/api.(*xxHeadServer).workerProcMsg(0xc0006ae080) > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/******/xxhead_server.go:349 > +0x285 > created by ******/api.(*xxHeadServer).Init > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/******/xxhead_server.go:224 > +0x339 > > The stack shows that all of the goroutines are waiting for the global lock in > sync.Pool. But I can't figure out which gouroutine is holding the lock. There > should be a gouroutine which has `sync.runtime_SemacquireMutex` in it's stack > not at the top, but there isn't. > > [****** ~]$ curl ******:795/debug/pprof/goroutine?debug=1 2>/dev/null | > grep 'sync.runtime_SemacquireMutex' -A5 -B1 > 166 @ 0x438cd0 0x4497e0 0x4497cb 0x449547 0x481c1c 0x482792 0x482793 > 0x4824ee 0x4821af 0x520ebd 0x51fdff 0x51fcd0 0x737fb4 0x73a836 0x73a813 > 0x97d660 0x97d60a 0x97d5e9 0x4689e1 > # 0x449546 sync.runtime_SemacquireMutex+0x46 > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/ > ******/go-env/go1-14-linux-amd64/src/runtime/sema.go:71 > # 0x481c1b sync.(*Mutex).lockSlow+0xfb > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/ > ******/go-env/go1-14-linux-amd64/src/sync/mutex.go:138 > # 0x482791 sync.(*Mutex).Lock+0x271 > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/ > ******/go-env/go1-14-linux-amd64/src/sync/mutex.go:81 > # 0x482792 sync.(*Pool).pinSlow+0x272 > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/ > ******/go-env/go1-14-linux-amd64/src/sync/pool.go:213 > # 0x4824ed sync.(*Pool).pin+0x5d > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/ > ******/go-env/go1-14-linux-amd64/src/sync/pool.go:206 > # 0x4821ae sync.(*Pool).Get+0x2e > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/ > ******/go-env/go1-14-linux-amd64/src/sync/pool.go:128 > -- > 120 @ 0x438cd0 0x4497e0 0x4497cb 0x449547 0x481c1c 0x482792 0x482793 > 0x4824ee 0x4821af 0x4f646f 0x51ed7b 0x51ff39 0x5218e7 0x73a8b0 0x97d660 > 0x97d60a 0x97d5e9 0x4689e1 > # 0x449546 sync.runtime_SemacquireMutex+0x46 > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/ > ******/go-env/go1-14-linux-amd64/src/runtime/sema.go:71 > # 0x481c1b sync.(*Mutex).lockSlow+0xfb > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/ > ******/go-env/go1-14-linux-amd64/src/sync/mutex.go:138 > # 0x482791 sync.(*Mutex).Lock+0x271 > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/ > ******/go-env/go1-14-linux-amd64/src/sync/mutex.go:81 > # 0x482792 sync.(*Pool).pinSlow+0x272 > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/ > ******/go-env/go1-14-linux-amd64/src/sync/pool.go:213 > # 0x4824ed sync.(*Pool).pin+0x5d > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/ > ******/go-env/go1-14-linux-amd64/src/sync/pool.go:206 > # 0x4821ae sync.(*Pool).Get+0x2e > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/ > ******/go-env/go1-14-linux-amd64/src/sync/pool.go:128 > -- > 119 @ 0x438cd0 0x4497e0 0x4497cb 0x449547 0x481c1c 0x482792 0x482793 > 0x4824ee 0x4821af 0x5269e1 0x5269d2 0x526892 0x51f6cd 0x51f116 0x51ff39 > 0x5218e7 0x73a8b0 0x97d660 0x97d60a 0x97d5e9 0x4689e1 > # 0x449546 sync.runtime_SemacquireMutex+0x46 > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/ > ******/go-env/go1-14-linux-amd64/src/runtime/sema.go:71 > # 0x481c1b sync.(*Mutex).lockSlow+0xfb > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/ > ******/go-env/go1-14-linux-amd64/src/sync/mutex.go:138 > # 0x482791 sync.(*Mutex).Lock+0x271 > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/ > ******/go-env/go1-14-linux-amd64/src/sync/mutex.go:81 > # 0x482792 sync.(*Pool).pinSlow+0x272 > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/ > ******/go-env/go1-14-linux-amd64/src/sync/pool.go:213 > # 0x4824ed sync.(*Pool).pin+0x5d > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/ > ******/go-env/go1-14-linux-amd64/src/sync/pool.go:206 > # 0x4821ae sync.(*Pool).Get+0x2e > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/ > ******/go-env/go1-14-linux-amd64/src/sync/pool.go:128 > -- > 59 @ 0x438cd0 0x4497e0 0x4497cb 0x449547 0x481c1c 0x482792 0x482793 > 0x4824ee 0x4821af 0x4d8291 0x4d5726 0x9857f7 0x9804ca 0x97d5d5 0x4689e1 > # 0x449546 sync.runtime_SemacquireMutex+0x46 > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/ > ******/go-env/go1-14-linux-amd64/src/runtime/sema.go:71 > # 0x481c1b sync.(*Mutex).lockSlow+0xfb > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/ > ******/go-env/go1-14-linux-amd64/src/sync/mutex.go:138 > # 0x482791 sync.(*Mutex).Lock+0x271 > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/ > ******/go-env/go1-14-linux-amd64/src/sync/mutex.go:81 > # 0x482792 sync.(*Pool).pinSlow+0x272 > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/ > ******/go-env/go1-14-linux-amd64/src/sync/pool.go:213 > # 0x4824ed sync.(*Pool).pin+0x5d > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/ > ******/go-env/go1-14-linux-amd64/src/sync/pool.go:206 > # 0x4821ae sync.(*Pool).Get+0x2e > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/ > ******/go-env/go1-14-linux-amd64/src/sync/pool.go:128 > -- > 36 @ 0x438cd0 0x4497e0 0x4497cb 0x449547 0x481c1c 0x482792 0x482793 > 0x4824ee 0x4821af 0x51ed98 0x51ed88 0x51ff39 0x5218e7 0x73a8b0 0x97d660 > 0x97d60a 0x97d5e9 0x4689e1 > # 0x449546 sync.runtime_SemacquireMutex+0x46 > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/ > ******/go-env/go1-14-linux-amd64/src/runtime/sema.go:71 > # 0x481c1b sync.(*Mutex).lockSlow+0xfb > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/ > ******/go-env/go1-14-linux-amd64/src/sync/mutex.go:138 > # 0x482791 sync.(*Mutex).Lock+0x271 > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/ > ******/go-env/go1-14-linux-amd64/src/sync/mutex.go:81 > # 0x482792 sync.(*Pool).pinSlow+0x272 > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/ > ******/go-env/go1-14-linux-amd64/src/sync/pool.go:213 > # 0x4824ed sync.(*Pool).pin+0x5d > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/ > ******/go-env/go1-14-linux-amd64/src/sync/pool.go:206 > # 0x4821ae sync.(*Pool).Get+0x2e > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/ > ******/go-env/go1-14-linux-amd64/src/sync/pool.go:128 > -- > 10 @ 0x438cd0 0x4497e0 0x4497cb 0x449547 0x481c1c 0x482792 0x482793 > 0x4824ee 0x4821af 0x4d8291 0x4d8856 0x9761b6 0x4689e1 > # 0x449546 sync.runtime_SemacquireMutex+0x46 > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/ > ******/go-env/go1-14-linux-amd64/src/runtime/sema.go:71 > # 0x481c1b sync.(*Mutex).lockSlow+0xfb > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/ > ******/go-env/go1-14-linux-amd64/src/sync/mutex.go:138 > # 0x482791 sync.(*Mutex).Lock+0x271 > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/ > ******/go-env/go1-14-linux-amd64/src/sync/mutex.go:81 > # 0x482792 sync.(*Pool).pinSlow+0x272 > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/ > ******/go-env/go1-14-linux-amd64/src/sync/pool.go:213 > # 0x4824ed sync.(*Pool).pin+0x5d > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/ > ******/go-env/go1-14-linux-amd64/src/sync/pool.go:206 > # 0x4821ae sync.(*Pool).Get+0x2e > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/ > ******/go-env/go1-14-linux-amd64/src/sync/pool.go:128 > -- > 2 @ 0x438cd0 0x4497e0 0x4497cb 0x449547 0x481c1c 0x482792 0x482793 > 0x4824ee 0x4821af 0x7c6ddc 0x7c6dc3 0x7c8cdf 0x4689e1 > # 0x449546 sync.runtime_SemacquireMutex+0x46 > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/ > ******/go-env/go1-14-linux-amd64/src/runtime/sema.go:71 > # 0x481c1b sync.(*Mutex).lockSlow+0xfb > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/ > ******/go-env/go1-14-linux-amd64/src/sync/mutex.go:138 > # 0x482791 sync.(*Mutex).Lock+0x271 > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/ > ******/go-env/go1-14-linux-amd64/src/sync/mutex.go:81 > # 0x482792 sync.(*Pool).pinSlow+0x272 > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/ > ******/go-env/go1-14-linux-amd64/src/sync/pool.go:213 > # 0x4824ed sync.(*Pool).pin+0x5d > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/ > ******/go-env/go1-14-linux-amd64/src/sync/pool.go:206 > # 0x4821ae sync.(*Pool).Get+0x2e > > /home/ferry/ONLINE_SERVICE/other/ferry/task_workspace/gopath/src/ > ******/go-env/go1-14-linux-amd64/src/sync/pool.go:128 > > I walked the code in Golang's runtime, but can't find any clue to this > phenomenon, can anyone who is expert in Golang give me a hand? > > func (p *Pool) pinSlow() (*poolLocal, int) { > // Retry under the mutex. > // Can not lock the mutex while pinned. > runtime_procUnpin() > allPoolsMu.Lock() //--------> HERE, all of the goroutines are waiting > here > defer allPoolsMu.Unlock() > pid := runtime_procPin() > // poolCleanup won't be called while we are pinned. > s := p.localSize > l := p.local > if uintptr(pid) < s { > return indexLocal(l, pid), pid > } > if p.local == nil { > allPools = append(allPools, p) > } > // If GOMAXPROCS changes between GCs, we re-allocate the array and > lose the old one. > size := runtime.GOMAXPROCS(0) > local := make([]poolLocal, size) > atomic.StorePointer(&p.local, unsafe.Pointer(&local[0])) // > store-release > runtime_StoreReluintptr(&p.localSize, uintptr(size)) // > store-release > return &local[pid], pid > } > > Reproduce: > Can't find a way to reproduce this problem for now. > -- > You received this message because you are subscribed to the Google Groups > "golang-nuts" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to golang-nuts+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/golang-nuts/1e6f8895-b6d2-418f-a942-b31d0ee6de1fn%40googlegroups.com. -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/D3846169-FE6C-4326-8F16-27CDDCBC0F85%40ix.netcom.com.