나는 Linux에서 Go에 pprof를 사용하려고했지만 기능 정보는 얻지 못했습니다. 내가 도대체 뭘 잘못하고있는 겁니까? 다음은 빌드/실행 단계입니다.Go 프로필에서 기능 고장을 얻는 방법
$ rm -f silly
$ go build -gcflags "-N -l" silly.go
$ rm -f silly.prof
$ ./silly --cpuprofile silly.prof
fib(42)=267914296
t=1.758997214s
$ go tool pprof --text silly.prof
1.75s of 1.75s total ( 100%)
flat flat% sum% cum cum%
1.75s 100% 100% 1.75s 100%
pprof의 출력에서 더 자세한 정보가 필요합니다. "t = 1.75 ..."라인은 프로그램 실행에 1.75 초가 걸렸음을 나타내며, 이는 프로파일 러의 100 Hz 샘플링 속도로 샘플을 수집하는 데 충분한 시간을 필요로합니다. 여기
프로그램입니다 : 내가 레드햇 엔터프라이즈 리눅스 서버에있어에 내가 실행 해요package main
import (
"flag"
"fmt"
"log"
"os"
"runtime/pprof"
"time"
)
func b(n int) int {
if n < 2 {
return n
} else {
return a(n-1) + b(n-2)
}
}
func a(n int) int {
if n < 2 {
return n
} else {
return a(n-1) + b(n-2)
}
}
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()
}
t0 := time.Now()
fmt.Printf("fib(42)=%v\n", a(42))
t1 := time.Now()
fmt.Printf("t=%v\n", t1.Sub(t0))
}
이동 버전 go1.4 리눅스/AMD64를 사용하여 7.0을 놓습니다.
프로그램에서 42를 42로 변경 했으므로 실행하려면 31.55 초가 걸렸습니다. 프로파일에는 여전히 고장이 없습니다. 다양한 시각화 형식은 단일 노드를 보여줍니다. –
나는 여러분의 코드를 그대로 사용했고 pprof는 main.a와 main.b 사이의 시간을 보여줍니다. 우연히 VM에서 이걸 실행하고 있습니까? osx에서 virtualbox 내부를 프로파일 링하는 데 문제가 발생했습니다. Linux on aws는 잘 작동하는 것 같습니다. – JimB
예제가 유용하다는보고를 해주셔서 감사합니다. 그것은 코딩 오류를 배제합니다. 내 설치 또는 기계 여야합니다. 나는 가상 머신 상에 있지 않다고 생각했지만 재확인 할 것이다. –