pprof によるゴルーチン数の監視
ゴルーチン リークの検出と防止には、ゴルーチン数のプロファイリングが不可欠です。 pprof は、Goroutine アクティビティを経時的に監視する便利なツールを提供します。
Goroutine Count Visualization
アクティブな Goroutine の数を視覚化するには、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」は、このゴルーチンのアクティブなインスタンスが 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
完全なダンプ内のスタック トレースと追加情報を分析することで、そうでないゴルーチンを特定できます。適切に終了または無期限にブロックされます。
以上がpprof を使用して Go アプリケーションの goroutine リークを監視およびトラブルシューティングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。