Go언어 프로그램 프로파일링하기

Programming 2015. 4. 7. 17:56 by 빠재

[Profiling Go Programs](http://blog.golang.org/profiling-go-programs)를 보고 따라한 내용들 ### 핸들러 연동 go-restful 패키지를 사용하고 있었으므로 다음과 같이 연동함 ``` debug := restful.NewContainer() debug.Filter(TrustedIP) debug.HandleWithFilter("/", http.HandlerFunc(pprof.Index)) debug.HandleWithFilter("/debug/pprof/cmdline", http.HandlerFunc(pprof.Cmdline)) debug.HandleWithFilter("/debug/pprof/profile", http.HandlerFunc(pprof.Profile)) debug.HandleWithFilter("/debug/pprof/symbol", http.HandlerFunc(pprof.Symbol)) c.Handle("/debug/pprof/", debug) ``` ### pprof 툴 리빌드(optional) http 서버가 사설 인증서를 사용하고 있기 때문에 그냥 사용하면 인증서 에러로 접속이 안 됨 *cmd/pprof/internal/fetch/fetch.go*의 `httpGet` 함수를 다음과 같이 수정한다 ``` // httpGet is a wrapper around http.Get; it is defined as a variable // so it can be redefined during for testing. var httpGet = func(url string, timeout time.Duration) (*http.Response, error) { client := &http.Client{ Transport: &http.Transport{ ResponseHeaderTimeout: timeout + 5*time.Second, TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, }, } return client.Get(url) } ``` ### 프로파일 정보 가져오기 현재 메모리 상태를 보려면 다음 명령어를 입력한다 go tool pprof $(서버 바이너리) $(서버 주소)/debug/pprof/heap 이려면 대화형 인터페이스가 나오는데 여기서 이것저것 만져볼 수 있다. web 이라고 입력하면 웹페이지로 다음과 같이 잘 작성된 그림이 뜬다. (그래프를 보려면 [graphviz](http://www.graphviz.org/)라는 프로그램이 설치되고 `PATH` 환경변수에 등록되어 있어야 한다)
Nav