1

私は会社で Go トレーニングを行っており、最善の方法で pprof パッケージを提示したいと考えています。私の例は、pprof の威力を単純に示すには不十分だと思います。go std ライブラリのみを使用したい。コードは、ボトルネックのある単純な呼び出しグラフを提供するはずです。

私の現在のワークフローは次のとおりです。 1. webserver に pprof を含めます 2. webserver を実行します (30 秒間データを収集します (デフォルト)) 3. webserver に対していくつかの curl ショットを実行します 4. pprof グラフを表示します

私のコードは以下のようになります:

package main

import (
    "fmt"
    "net/http"
    _ "net/http/pprof"
)

func handler(w http.ResponseWriter, r *http.Request) {
    for i := 0; i < 100000000; i++ {
        w.Write([]byte(fmt.Sprintf("%d - %d, ", i, i)))
    }
}

func main() {
    http.HandleFunc("/", handler)
    http.ListenAndServe(":8080", nil)
}

フィルタリングなしの Pprof

すべてのppf

handler() 関数のみの Pprof

ここに画像の説明を入力

4

1 に答える 1

1

文字列連結はどうですか?私のマシンではかなり線形のグラフが生成されます。[]byteさらに、これは、大量のゴミを作成する文字列を連結するのではなく、追加することによって文字列を作成する必要がある理由を人々に教える良い方法です。

func handler(w http.ResponseWriter, r *http.Request) {
    var s string
    for i := 0; i < 100000; i++ {
        s += strconv.Itoa(i)
    }
    w.Write([]byte(s))
}
于 2015-11-05T16:27:20.170 に答える