go には、コード パフォーマンス モニタリング用の pprof パッケージがあります。パッケージは
net/http/pprof
# の 2 か所にあります。 ##runtime/pprof実際には、net/http/pprof は runtime/pprof パッケージを使用してカプセル化し、http ポートで公開しますpprof パッケージ
Web サーバー
Go プログラムが http パッケージで起動された Web サーバーの場合は、Web サーバーのステータスを確認する必要があります。この時点では、net/http/pprof を選択できます。 package_「net/http/pprof」をインポートするだけです。 その後、ブラウザで http://localhost:port/debug/pprof/ を使用すると、CPU 使用率やメモリ使用率など、現在の Web サービスのステータスを直接確認できます。具体的な使用方法については、godoc の説明書をご覧ください。サービス プロセス
Go プログラムが Web サーバーではなくサービス プロセスである場合は、net/http/pprof パッケージの使用を選択することもできます。これも導入されています。 net/http/pprof をパッケージ化し、別の goroutine を開いてポート監視を有効にします。 例:go func() { log.Println(http.ListenAndServe("localhost:6060", nil)) }()
Application
Go プログラムが単なるアプリケーション (ファボナッチ数列の計算など) である場合、net は使用できません。 /http/pprof パッケージの場合は、runtime/pprof を使用する必要があります。具体的な方法は、pprof.StartCPUProfile と pprof.StopCPUProfile を使用することです。たとえば、次の例:var cpuprofile = flag.String("cpuprofile", "", "write cpu profile to file") func main() { flag.Parse() if *cpuprofile != "" { f, err := os.Create(*cpuprofile) if err != nil { log.Fatal(err) } pprof.StartCPUProfile(f) defer pprof.StopCPUProfile() } …プログラムを実行するときに、fabonacci --cpuprofile=fabonacci.prof などの --cpuprofile パラメータを追加します。このようにして、CPU 情報が実行中のプログラムが記録されます XXX.prof がヒットします。 次のステップは、このプロファイル情報を使用してパフォーマンス分析グラフを作成することです (graphviz がインストールされている必要があります)。 Use go tool pprof (application) (application prof file) pprof と入力し、Web コマンドを使用して /tmp の下に svg ファイルを生成します。svg ファイルは参照できます。デバイスの下で表示されます。 。 #プログラムが非常に単純である場合、たとえば println ステートメントが 1 つしかない場合、pprof.StartCPUProfile を使用して何も出力することはできません。
例
Go-tour を例に挙げます。これは Web プログラムです。__ "net/http /pprof" を追加しました。 ブラウザでプロファイル情報を直接表示できますCPU ステータス分析グラフを生成します
次に、 CPU ステータス分析チャートを生成したい場合は、go ツール pprof http://localhost:3999/debug/pprof/profile を呼び出し、30 秒のプロファイル収集時間に入ります。このイベント中にページを更新します。 go-tour ブラウザ上で CPU を使用してデータを生成してみます。(pprof) top10 Total: 3 samples 1 33.3% 33.3% 1 33.3% MHeap_AllocLocked 1 33.3% 66.7% 1 33.3% os/exec.(*Cmd).closeDescriptors 1 33.3% 100.0% 1 33.3% runtime.sigprocmask 0 0.0% 100.0% 1 33.3% MCentral_Grow 0 0.0% 100.0% 2 66.7% main.Compile 0 0.0% 100.0% 2 66.7% main.compile 0 0.0% 100.0% 2 66.7% main.run 0 0.0% 100.0% 1 33.3% makeslice1 0 0.0% 100.0% 2 66.7% net/http.(*ServeMux).ServeHTTP 0 0.0% 100.0% 2 66.7% net/http.(*conn).serve(pprof)web Go 言語の知識について詳しくは、
go 言語チュートリアル 列に注目してください。
以上がGo での pprof の使い方を完全にマスターするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。