2016-07-15 4 views
2

基本的に私のプログラムが時間の経過とともにゴルーチンを漏らしているかどうかを見極めたい。だから 私は時間の経過とともにいくつのゴルーチンが走っているのか見たい。 pprofでこれを行う方法はありますか?ゴルーチンの数をプロファイルする方法

私はgo tool pprof http://localhost:8888/debug/pprof/blockを行っています。

どのくらいの時間がブロックされているのですが、実行されているルーチンの数はわかりません。

+4

現在存在するゴルーチンの数を返す['runtime.NumGoroutine()'](https://golang.org/pkg/runtime/#NumGoroutine)に気づいていますか? – icza

答えて

0

回答が指摘されたので、答えはruntime.NumGoroutine()です。

2

お使いのブラウザに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 
+0

debug = 1のとき、@の後のアドレスは何を表していますか? - ( "0x42f223 0x42f2e4 0x40542f 0x404f4b 0x4a0586 0x4600a1") – lafolle

関連する問題