[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` 환경변수에 등록되어 있어야 한다)
'Programming' 카테고리의 다른 글
Math.Round의 함정? (0) | 2024.08.26 |
---|---|
Crashlytics로 NDK 크래시 보기 (0) | 2015.05.26 |
graphite 설치중 막히는 것들 (0) | 2014.10.25 |
특정 안드로이드 기기에서 '패키지 파일이 올바르지 않습니다' 에러 (1) | 2014.06.27 |
[AS3] Inspectable 변수 초기화 (0) | 2013.10.03 |