pprof を使用したゴルーチンの数のプロファイリング
Go プログラム内の潜在的なゴルーチン リークを検出するには、アクティブなゴルーチンの数を長期的に監視する必要があります。標準の go ツール pprof コマンドはブロックに関する洞察を提供しますが、ゴルーチンの数に直接対処するものではありません。
ゴルーチンの数を効果的にプロファイリングするには、ブラウザで http://localhost:8888/debug/pprof/ を開きます。 。これには 2 つの関連リンクが表示されます:
Goroutine リンクには、同じコードを共有する単一の goroutine が表示されます。エントリとその数。例:
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 は、各ゴルーチンの 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
これらの pprof エンドポイントを利用すると、プログラム内のゴルーチンの数を効果的に監視でき、潜在的なゴルーチンの検出と解決に役立ちます。漏れます。
以上がpprof を使用して Go プログラム内のゴルーチンの数をプロファイリングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。