ホームページ  >  記事  >  バックエンド開発  >  Go での pprof の使い方を完全にマスターする

Go での pprof の使い方を完全にマスターする

尚
転載
2019-11-25 13:41:214227ブラウズ

Go での pprof の使い方を完全にマスターする

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 ファイルは参照できます。デバイスの下で表示されます。 。

Go での pprof の使い方を完全にマスターする

#プログラムが非常に単純である場合、たとえば println ステートメントが 1 つしかない場合、pprof.StartCPUProfile を使用して何も出力することはできません。

Go-tour を例に挙げます。これは Web プログラムです。

__ "net/http /pprof" を追加しました。

ブラウザでプロファイル情報を直接表示できます

Go での 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 での pprof の使い方を完全にマスターする

Go 言語の知識について詳しくは、

go 言語チュートリアル 列に注目してください。

以上がGo での pprof の使い方を完全にマスターするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。