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 は、各 goroutine の 1 つのインスタンスを示します。
完全な Goroutine スタック ダンプは、リークに特に役立ちます検出。スタック トレースとアクティビティ ステータスを含む各 goroutine を個別にリストします:
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 エンドポイントを利用することで、プログラム内の goroutine の数。潜在的な goroutine リークの検出と解決に役立ちます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3