2016-05-21 6 views
4

私はpprofでGoアプリケーションをプロファイリングしています。pprof goアプリケーションのCPUプロファイルにサンプルがありません

アプリケーションは約4-10%のCPUを使用しており、短時間実行したままで約6-11kbのプロファイルを生成します。これは、いくつかのアクティビティをサンプリングできるはずであることを私に示唆しています。

私は結果を表示すると、しかし、私は以下を参照してください。

$ go tool pprof --text bigproc 
1.77s of 1.77s total ( 100%) 
     flat flat% sum%  cum cum% 
    1.77s 100% 100%  1.77s 100% 
$ 

興味深い情報が欠落しているように見えます。何が間違っていますか?

google-perftoolsのgoバージョン1.6.1とpprofバージョン2.2.1(これが重要な場合)は、Linux上にあります。

+1

にプログラムカウンタからなるサンプルを記録1.7秒以上、特にわずか4〜10%のCPUで。数分サンプリングしてみてください。 – JimB

+0

私はちょっとした壁時計のようなもののためにプロセスを走らせました。私は、出力に記載されている1.77秒を推測しているので、CPUがアイドル(プログラムがブロックされているかスリープ状態になっている)時間を除いてCPU時間です。私は長い間走ってみよう! –

+1

通常、アイドル状態のランタイムではなく、そこからできるだけ多くのサンプルを取得するためにプロファイリングしているコードパスをプロファイルするときに、プロファイルを作成します。 4-10%のCPUのみを使用している場合は、サンプルの90〜96%が良いとは限りません。 – JimB

答えて

3

生成されたプロファイルに関連付けられた実行可能ファイルを指定する必要があるため、go tool pprofを誤って使用しています。

それは間違ったサンプリングの問題ではありません(それはcpuprofile.profを生産し、実行可能である、mainに注意してください)

$ go tool pprof --text main cpuprofile.prof 
680ms of 680ms total ( 100%) 
     flat flat% sum%  cum cum% 
    350ms 51.47% 51.47%  610ms 89.71% main.renderMandelbrotUnified 
    130ms 19.12% 70.59%  130ms 19.12% math.Log 
     40ms 5.88% 76.47%  60ms 8.82% image.(*RGBA).Set 
[cut] 

をこれでこの

$ go tool pprof --text cpuprofile.prof 
680ms of 680ms total ( 100%) 
     flat flat% sum%  cum cum% 
    680ms 100% 100%  680ms 100% 

の比較:約100サンプルが取られていることを考えます1秒ごとに実行するので、1.7秒でさえ、とにかくいくつかのサンプルを取得する必要があります(from here):

CPUプロファイリングを有効にすると、囲碁プログラムは毎秒約100回 を停止し、あなたがたくさんのためにサンプリングする必要があるとしている 現在実行中のゴルーチンのスタック

+0

ありがとう、私はとても愚かだと感じる!私は一人ではないという事実でいくつかの慰めを取る:https://github.com/golang/go/issues/10863 :) –

+0

はい、心配しないで、私にも起こったと私は十分に幸運だったそれは、投稿する前に、それ! :D – AkiRoss

+1

うまくいけば、https://go-review.googlesource.com#/c/23323/は何らかの形でそれを完成させてくれるので、私たちは将来の世代にこの混乱を救うでしょう –

関連する問題