私のWebサーバをプロファイルしようとしていますが、私のpprofにはハンドラfuncに関するデータが含まれていません。
私はjulienschmidtによってhttprouter packageを使用しています。私のハンドラのベンチマークを行い、そのためのpprofプロファイルを参照してください。ベンチマークのために、私はgo-wrkjulienschmidtrouterのpprofプロファイルとハンドリングのプロファイリングではないベンチマーク
を使用しています私はこのように私のウェブサーバとpprofを設定します。
// Configure the server
server := &http.Server{
Addr: ":4000",
Handler: router,
}
go func() {
log.Println(http.ListenAndServe(":6060", nil))
}()
// Start the server
err = server.ListenAndServe()
if err != nil {
panic(err)
}
ルータは次のように初期化されます。
// Create the httprouter
router := httprouter.New()
// Register all handlers
router.GET("/entities/:type/map", h.UseHandler(&h.ApiGetEntitiesMapRequest{}, p))
そして、私のハンドラは、このようになります。 :
func (req ApiGetEntitiesMapRequest) Handle(r *http.Request, hrp httprouter.Params, p Params) (interface{}, error) {
test := make([]string, 0)
for i := 0; i < 1000; i++ {
test = append(test, "1")
test = append(test, "2")
// Ensure pprof has some time to collect its data
time.Sleep(10)
}
return test, nil
}
このハンドラは単なるテストに過ぎず、私は動的に追加しますスライスに多くの要素。その理由は、これらの動的割り当てがpprofのヒーププロファイルで表されているかどうかをテストしたかったからです。
さて、私がやったことだった。
- 私のサーバーを起動し
- が私の端末でhttp://localhost:6060/debug/pprof/heap pprof GOツールを実行
- その後、ベンチマーク行く-WRK -no-Cを実行することで、私のハンドラ-d 5 http://localhost:4000/entities/object/map
ご要望と私のベンチマークもお伝えしますすべて正しく動作します。しかし、pngをpprofターミナルに入力すると、このグラフはになります。
グラフには、自分のハンドラと、ハンドラで行った高価なヒープ割り当てに関する情報は含まれていません。私は間違って何をしていますか?