2016-07-19 7 views
0

https://software.intel.com/en-us/blogs/2014/05/10/debugging-performance-issues-in-go-programsのような記事に基づいて、Go(golang)のパフォーマンス解析に飛び込んでいます。Go CPUプロファイルに関数呼び出し情報がありません

しかし、実際のプロファイルプログラムでは、生成されたCPUプロファイルにはほとんど情報がありません。 goツールは、プロファイルが空であるか、関数呼び出しに関する情報がないことを通知します。これは、OS XとLinuxの両方で発生します。

私はこの状況の最小の例を生成しました - 私は同様の方法でプロファイルを収集し、実際のプログラムでも同じ問題に直面しています。ここで

miniprofile/main.goのソースコードです:

package main 

import (
    "fmt" 
    "os" 
    "runtime/pprof" 
) 

func do_something(prev string, limit int) { 
    if len(prev) < limit { 
     do_something(prev+"a", limit) 
    } 
} 

func main() { 
    f, err := os.Create("./prof") 
    if err != nil { 
     fmt.Println(err) 
     os.Exit(1) 
    } 
    pprof.StartCPUProfile(f) 
    defer pprof.StopCPUProfile() 

    do_something("", 100000) 
} 

私はほとんどすべての時間がdo_somethingする別の再帰呼び出しに費やされていることを伝えるCPUのプロフィールを見ることを期待しています。

しかし、これは(上記の最小限のアプリがminiprofileと呼ばれる)が起こる - 非常に有用ではない:

$ go version 
go version go1.6.2 darwin/amd64 
$ go install . 
$ miniprofile 
$ go tool pprof --text prof 
1.91s of 1.91s total ( 100%) 
     flat flat% sum%  cum cum% 
    1.91s 100% 100%  1.91s 100% 

私は恐ろしく間違った方法で何かをやっていますか?

答えて

1

あなたはpprofするバイナリ引数が欠落している:

go tool pprof --text miniprofile prof 
関連する問題