基本的に私のプログラムが時間の経過とともにゴルーチンを漏らしているかどうかを見極めたい。だから 私は時間の経過とともにいくつのゴルーチンが走っているのか見たい。 pprof
でこれを行う方法はありますか?ゴルーチンの数をプロファイルする方法
私はgo tool pprof http://localhost:8888/debug/pprof/block
を行っています。
どのくらいの時間がブロックされているのですが、実行されているルーチンの数はわかりません。
基本的に私のプログラムが時間の経過とともにゴルーチンを漏らしているかどうかを見極めたい。だから 私は時間の経過とともにいくつのゴルーチンが走っているのか見たい。 pprof
でこれを行う方法はありますか?ゴルーチンの数をプロファイルする方法
私はgo tool pprof http://localhost:8888/debug/pprof/block
を行っています。
どのくらいの時間がブロックされているのですが、実行されているルーチンの数はわかりません。
回答が指摘されたので、答えはruntime.NumGoroutine()
です。
お使いのブラウザにhttp://localhost:8888/debug/pprof/を公開してください。 "goroutine"(http://localhost:8888/debug/pprof/goroutine?debug=1)と "full goroutine stack dump"(http://localhost:8888/debug/pprof/goroutine?debug=2)の2つの関連リンクが表示されます。
最初のエントリは、1つのエントリと同じコードを共有するすべてのゴルーチンを、名前の前にそのようなゴルーチンの数とともに表示します。例:
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
これらの両方のゴルーチンの1つは、@の前にあるものです。
完全なダンプは、それはあなたのすべての個別ゴルーチンだけでなく、そのスタックトレースとそれがやっていると紹介し、リークを発見するために非常に有用である(例えば、チャネルから受信するために待機している時間の長さ):
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
debug = 1のとき、@の後のアドレスは何を表していますか? - ( "0x42f223 0x42f2e4 0x40542f 0x404f4b 0x4a0586 0x4600a1") – lafolle
現在存在するゴルーチンの数を返す['runtime.NumGoroutine()'](https://golang.org/pkg/runtime/#NumGoroutine)に気づいていますか? – icza