github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/net/http/pprof/pprof.go (about) 1 // Copyright 2010 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // パッケージpprofは、pprof可視化ツールが期待する形式で実行時プロファイリングデータをHTTPサーバー経由で提供します。 6 // 7 // このパッケージは通常、そのHTTPハンドラを登録する副作用のためにのみインポートされます。 8 // ハンドルされるパスはすべて/debug/pprof/で始まります。 9 // Go 1.22以降、すべてのパスはGETでリクエストする必要があります。 10 // 11 // pprofを使用するためには、このパッケージをプログラムにリンクしてください: 12 // 13 // import _ "net/http/pprof" 14 // 15 // アプリケーションがすでにHTTPサーバーを実行していない場合、サーバーを起動する必要があります。 16 // "net/http"と"log"をインポートし、次のコードをメイン関数に追加してください: 17 // 18 // go func() { 19 // log.Println(http.ListenAndServe("localhost:6060", nil)) 20 // }() 21 // 22 // デフォルトでは、このパッケージで定義されている[Cmdline]、[Profile]、[Symbol]、[Trace]プロファイル 23 // に加えて[runtime/pprof.Profile]にリストされているすべてのプロファイルが使用可能です([Handler]経由)。 24 // DefaultServeMuxを使用していない場合は、使用しているmuxにハンドラを登録する必要があります。 25 // 26 // # パラメータ 27 // 28 // パラメータはGETクエリパラメータを介して渡すことができます: 29 // 30 // - debug=N(すべてのプロファイル):応答形式:N = 0:バイナリ(デフォルト)、N> 0:プレーンテキスト 31 // - gc=N(ヒーププロファイル):N> 0:プロファイリング前にガベージコレクションを実行 32 // - seconds=N(allocs、block、goroutine、heap、mutex、threadcreateプロファイル):デルタプロファイルを返す 33 // - seconds=N(cpu(profile)、トレースプロファイル):指定された期間のプロファイル 34 // 35 // # 使用例 36 // 37 // ヒーププロファイルを表示するためにpprofツールを使用する場合: 38 // 39 // go tool pprof http://localhost:6060/debug/pprof/heap 40 // 41 // または30秒のCPUプロファイルを表示する場合: 42 // 43 // go tool pprof http://localhost:6060/debug/pprof/profile?seconds=30 44 // 45 // または、プログラムで [runtime.SetBlockProfileRate] を呼び出した後にブロッキングプロファイルのゴルーチンを表示する場合: 46 // 47 // go tool pprof http://localhost:6060/debug/pprof/block 48 // 49 // または、プログラムで [runtime.SetMutexProfileFraction] を呼び出した後にコンテンデッドなミューテックスのホルダーを表示する場合: 50 // 51 // go tool pprof http://localhost:6060/debug/pprof/mutex 52 // 53 // このパッケージはまた、「go tool trace」コマンドに対応する実行トレースデータを提供するハンドラもエクスポートしています。 54 // 5秒の実行トレースを収集するには: 55 // 56 // curl -o trace.out http://localhost:6060/debug/pprof/trace?seconds=5 57 // go tool trace trace.out 58 // 59 // 使用可能なプロファイルをすべて表示するには、ブラウザでhttp://localhost:6060/debug/pprof/を開いてください。 60 // 61 // 機能の詳細については、次のURLをご覧ください: 62 // https://blog.golang.org/2011/06/profiling-go-programs.html。 63 package pprof 64 65 import ( 66 "github.com/shogo82148/std/net/http" 67 ) 68 69 // Cmdlineは実行中のプログラムのコマンドラインをNULバイトで区切られた引数として返します。 70 // このパッケージの初期化は/debug/pprof/cmdlineとして登録されます。 71 func Cmdline(w http.ResponseWriter, r *http.Request) 72 73 // Profile は、pprofの形式でCPUプロファイルを応答します。 74 // プロファイリングは、秒数が指定されたGETパラメータで指定された期間、または指定されていない場合は30秒間続きます。 75 // パッケージの初期化により、/debug/pprof/profile として登録されます。 76 func Profile(w http.ResponseWriter, r *http.Request) 77 78 // Traceはバイナリ形式の実行トレースで応答します。 79 // トレースは、秒数が指定されていない場合は1秒間、指定されている場合はGETパラメータで指定された時間の間続きます。 80 // パッケージの初期化により、/debug/pprof/traceとして登録されます。 81 func Trace(w http.ResponseWriter, r *http.Request) 82 83 // Symbolはリクエストにリストされたプログラムカウンターを検索し、 84 // プログラムカウンターと関数名のマッピングを返す。 85 // パッケージの初期化では、それを/debug/pprof/symbolとして登録します。 86 func Symbol(w http.ResponseWriter, r *http.Request) 87 88 // Handlerは、指定したプロファイルを提供するHTTPハンドラを返します。 89 // 使用可能なプロファイルは[runtime/pprof.Profile]で見つけることができます。 90 func Handler(name string) http.Handler 91 92 // Indexはリクエストで指定されたpprof形式のプロファイルで応答します。 93 // たとえば、"/debug/pprof/heap"は"heap"プロファイルを提供します。 94 // Indexは"/debug/pprof/"へのリクエストに対して利用可能なプロファイルをリストしたHTMLページで応答します。 95 func Index(w http.ResponseWriter, r *http.Request)