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)