0

다음과 같은 장난감 코드를 감안할 때, 나는왜 프로파일 러가 작동하지 않습니까?

go tool pprof cpu.prof 

을 실행하고 waster1 및 waster2에 대한 유용한 정보를 얻을 수 있기를 기대하지만, 내가 pprof에서 정상을 실행할 때, 내가 가진 전부입니다

Showing nodes accounting for 0, 0% of 0 total 
     flat flat% sum%  cum cum% 

package main 

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

func waster2() int { 
    j := 0; 
    for i := 0; i < 100; i++ { 
     j += waster1() 
    } 
    return j 
} 

func waster1() int { 
    j := 0; 
    for i := 0; i < 10000; i++ { 
     j++ 
    } 
    return j 
} 

func main() { 
    f, err := os.Create("cpu.prof") 

    if err != nil { 
     log.Fatal("could not create CPU profile: ", err) 
    } 

    if err := pprof.StartCPUProfile(f); err != nil { 
     log.Fatal("could not start CPU profile: ", err) 
    } 

    defer pprof.StopCPUProfile() 

    j := waster2() 

    fmt.Println(j) 
} 
:

그것은 가능하다 문제가 내가 여기

윈도우 (10)에 우분투를 실행하는 WSL을 사용하고 있다는 것입니다 내가 사용하고있는 코드입니다

+0

이 보이는 윈도우에서 우분투를 실행하는 WSL를 사용하므로 윈도우 10 일이 붉은 청어 점이다 . –

+0

먼저 'pprof'에 대한 인수로 바이너리를 제공해야합니다. 귀하의 프로그램은 얼마 동안 운영됩니까? 의미있는 프로필을 작성하기에 충분한 샘플이 없을 수도 있습니다. – JimB

+0

@JimB add는 함수 (10 초 런타임 이상) 및 도구 명령의 이진수로 여전히 절전 모드로 전환됩니다. –

답변

1

Windows에서 실행하면 프로파일 러에 샘플이 생성되지 않습니다. 다음은 다음 이동 블로그 상태에서 article을 다음

When CPU profiling is enabled, the Go program stops about 100 times per second and 
records a sample consisting of the program counters on the currently executing 
goroutine's stack. 

코드를 실행 적은 것을 2ms의 소요 때문에 프로파일 러는 샘플을 허용하지 않습니다. 루프 카운트를 100에서 10000으로 늘리면 출력에 샘플이 표시됩니다.

또 다른 참고로 파일 f을 닫아야합니다. 그래서 같이 :

if err != nil { 
    log.Fatal("could not create CPU profile: ", err) 
} 
defer f.Close() 
+0

함수와 연기에 대해 잠을 더했습니다. 10 초 이상 실행되었고 pprof에는 출력이 없습니다. –

+1

프로파일 러는 CPU가 작동하지 않는 시간을 추적하지 않습니다. 최대 루프 수를 늘리려고 했습니까? –

1

문제는 당신이 데비안 자체로 실행에 같은 일을하는 것처럼 10

관련 문제