2014-12-08 5 views
2

나는 마티니 기반 서버를 프로파일 링하려고하는데, 하나의 요청을 프로파일 링하고 런타임 기간과 함께 함수의 전체 분석을 얻고 싶습니다. . 둘 다 runtime/pprofnet/http/pprof 놀아 시도했지만 결과는 다음과 같다 :go (프로파일 링)에서 기능 지속 시간 분석을 얻는 방법

Total: 3 samples 
     1 33.3% 33.3%  1 33.3% ExternalCode 
     1 33.3% 66.7%  1 33.3% runtime.futex 
     1 33.3% 100.0%  2 66.7% syscall.Syscall 

웹보기 중 하나를 매우 도움이되지 않습니다.

우리는 정기적으로 다른 프로그램을 프로파일 링하고, 출력은 내가 필요한 것 같다 : 차이가 어디에서 오는

20ms of 20ms total ( 100%) 
     flat flat% sum%  cum cum% 
     10ms 50.00% 50.00%  10ms 50.00% runtime.duffcopy 
     10ms 50.00% 100%  10ms 50.00% runtime.fastrand1 
     0  0% 100%  20ms 100% main.func·004 
     0  0% 100%  20ms 100% main.pruneAlerts 
     0  0% 100%  20ms 100% runtime.memclr 

내가 말할 수 없습니다.

+2

어떤 OS 것은 당신이 프로필을 사용하고 있습니까? – JimB

+0

방랑. 문제가 있는지 여부는 논란의 여지가 있지만 어디서나 결론을 내릴 수는 없습니다. 우리는 사용할 수있는 스테이징 환경을 가지고 있지만 동일한 접근 방식을 취하고 있습니까? – Ronna

+0

방랑자는 OS가 아닙니다. 실제로 리눅스에서 프로필을 작성해야하지만, darwin에서 작동하게하려면 여기 [http://godoc.org/rsc.io/pprof_mac_fix] 커널 패치가 있어야합니다. 나는 아직도 OSX에서 VirtualBox의 LInux를 사용하여 이와 같은 결과를 보았습니다. (패치가 그 상황을 돕는 지 확실하지 않습니다.) – JimB

답변

3

pprof은 원래 gperftools 제품군의 타이머 기반 샘플링 프로파일 러입니다. Rus Cox는 나중에 pprof 도구를 Go : http://research.swtch.com/pprof으로 이식했습니다.

이 타이머 기반 프로파일 러는 시스템 프로파일 링 타이머를 사용하고 SIGPROF을 수신 할 때마다 통계를 기록함으로써 작동합니다. 현재는 100Hz로 설정되어 있습니다. pprof.go에서 :

// The runtime routines allow a variable profiling rate, 
// but in practice operating systems cannot trigger signals 
// at more than about 500 Hz, and our processing of the 
// signal is not cheap (mostly getting the stack trace). 
// 100 Hz is a reasonable choice: it is frequent enough to 
// produce useful data, rare enough not to bog down the 
// system, and a nice round number to make it easy to 
// convert sample counts to seconds. Instead of requiring 
// each client to specify the frequency, we hard code it. 
const hz = 100 

당신은 자신을 runtime.SetCPUProfileRate를 호출하고 프로파일 출력을 작성하여이 주파수를 설정할 수 있으며 Gperftools는 CPUPROFILE_FREQUENCY로이 주파수를 설정할 수 있습니다 만, 실제로는 그 유용하지 않습니다.

프로그램을 샘플링하려면 항상 측정하려는 것을 수행해야합니다. 유휴 런타임을 샘플링하면 아무 것도 유용하지 않습니다. 일반적으로 원하는 코드를 가능한 한 많은 CPU 시간을 사용하여 벤치 마크 또는 핫 루프에서 실행합니다. 충분한 샘플을 축적 한 후에는 각 기능에 소요되는 시간을 비례하여 표시하는 데 충분한 기능이 있어야합니다.

은 참조 :

+0

나는 당신이 말하는 것을 이해하고 있다고 생각하며, pprof는 단순히 나를위한 도구가 아닙니다. 나는 이제 내가 다른 형식으로 프로파일을 얻는 이유에 대해서 궁금해합니다. – Ronna

+1

출력물을 얻으려면 정확히 무엇이 실행되었는지 표시해야합니다. 다른 버전의 pprof 도구를 사용할 수도 있습니다. – JimB

+1

오, 완전성을 위해 go1.5에 착륙 할 수있는 실행 추적 프로그램에 대한 작업이 있습니다. 이것은 결국 당신에게 더 많은 것을 줄 수 있습니다. (모두 멋진 비주얼 형식으로). – JimB