Öffnen Sie http://localhost:8888/debug/pprof/ in Ihrem Browser. Sie werden zwei relevante Links sehen: "goroutine" (http://localhost:8888/debug/pprof/goroutine?debug=1) und "full goroutine stack dump" (http://localhost:8888/debug/pprof/goroutine?debug=2).
Der erste zeigt alle goroutines, die den gleichen Code wie ein Eintrag teilen, mit der Anzahl solcher goroutines vor ihrem Namen. Zum Beispiel:
1 @ 0x42f223 0x42f2e4 0x40542f 0x404f4b 0x4a0586 0x4600a1
# 0x4a0586 gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands.(*RunCommand).startWorkers+0x56 /home/me/go/src/gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands/multi.go:164
1 @ 0x42f223 0x43dfd7 0x43d532 0x4a04ed 0x4600a1
# 0x4a04ed gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands.(*RunCommand).processRunners+0x45d /home/me/go/src/gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands/multi.go:147
Es gibt eine dieser beiden goroutines, das ist, was die 1 vor dem @ bedeutet.
Die vollständige Dump ist äußerst nützlich für die Lecks zu finden, es wird Ihnen separat jeden goroutine zeigen, sowie seinen Stack-Trace und was es tut (zB wie lange es hat mich von einem Kanal zu empfangen gewartet):
goroutine 49 [chan receive, 2 minutes]:
gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands.(*RunCommand).startWorkers(0xc820103ee0, 0xc820274000, 0xc820274060, 0xc8201d65a0)
/home/me/go/src/gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands/multi.go:164 +0x56
created by gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands.(*RunCommand).Run
/home/me/go/src/gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands/multi.go:294 +0x41b
goroutine 50 [select]:
gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands.(*RunCommand).processRunners(0xc820103ee0, 0x0, 0xc820274060, 0xc8201d65a0)
/home/me/go/src/gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands/multi.go:147 +0x45d
created by gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands.(*RunCommand).startWorkers
/home/me/go/src/gitlab.com/gitlab-org/gitlab-ci-multi-runner/commands/multi.go:165 +0x96
Ist Ihnen ['runtime.NumGoroutine()'] (https://golang.org/pkg/runtime/#NumGoroutine) bekannt, welches die Anzahl der aktuell existierenden Goroutinen zurückgibt? – icza