golang 프로그램 성능 분석

pprof 와 trace 는 golang 프로그램의 성능 분석 에 자주 사용 되 는 두 가지 도구 입 니 다.
본 고 는 그 사용 방법 을 간단하게 소개 한다.
1. 프로그램 에 pprof package 도입
장기 적 으로 실행 되 는 백 엔 드 프로그램 에 있어 패키지 net/http/pprof 를 사용 하 는 것 은 비교적 편리 한 선택 이다.
사용 방법 은 매우 간단 합 니 다. import package 에 다음 을 더 하면 됩 니 다.
import _ "net/http/pprof"

제 공 된 인 터 페 이 스 를 사용 할 수 있 습 니 다.
"/debug/pprof/"
"/debug/pprof/cmdline"
"/debug/pprof/profile"
"/debug/pprof/symbol"
"/debug/pprof/trace"
"/debug/pprof/goroutine"
"/debug/pprof/heap"
...

예 는 다음 과 같다.
/*simple.go*/

package main

import (
        "log"
        _ "net/http/pprof"
        "net/http"
        "time"
)

func main() {

        go func() {
                log.Println(http.ListenAndServe("localhost:6060", nil))
        }()

        go worker()

        select{}
}

// simple worker
func worker(){

        strSlice := []string{}
        for {
                str := "hello world "
                strSlice = append(strSlice, str)

                time.Sleep(time.Second)
        }

}


2. 사용
브 라 우 저 에서 열기 http://127.0.0.1:6060/debug/pprof다음 화면 을 볼 수 있 습 니 다:
 /debug/pprof/

Types of profiles available:
Count	Profile
2	allocs
0	block
0	cmdline
5	goroutine
2	heap
0	mutex
0	profile
9	threadcreate
0	trace
full goroutine stack dump

Profile Descriptions:

    allocs:
    A sampling of all past memory allocations
    block:
    Stack traces that led to blocking on synchronization primitives
    cmdline:
    The command line invocation of the current program
    goroutine:
    Stack traces of all current goroutines
    heap:
    A sampling of memory allocations of live objects. You can specify the gc GET parameter to run GC before taking the heap sample.
    mutex:
    Stack traces of holders of contended mutexes
    profile:
    CPU profile. You can specify the duration in the seconds GET parameter. After you get the profile file, use the go tool pprof command to investigate the profile.
    threadcreate:
    Stack traces that led to the creation of new OS threads
    trace:
    A trace of execution of the current program. You can specify the duration in the seconds GET parameter. After you get the trace file, use the go tool trace command to investigate the trace.


2.1 현재 실행 중인 goroutine 보기
브 라 우 저 에서 링크 127.0.0.1:6060/debug/pprof/goroutine 를 열 면 goroutine 파일 을 다운로드 합 니 다.
다운로드 후 명령 줄 에서 실행:
go tool pprof -http=":8081" goroutine

다음 그림 과 같이 브 라 우 저 페이지 를 자동 으로 엽 니 다.在这里插入图片描述
그림 에서 goroutine 의 수량 과 호출 관 계 를 뚜렷하게 볼 수 있다.
왼쪽 메뉴 모음 Top、Graph、Flame Graph 등 을 볼 수 있 습 니 다.
2.2 메모리 사용량 보기
브 라 우 저 에서 링크 127.0.0.1:6060/debug/pprof/heap 를 열 면 힙 파일 을 다운로드 합 니 다.
다운로드 후 명령 줄 에서 실행:
go tool pprof -http=":8081" heap

다음 그림 과 같이 브 라 우 저 페이지 를 자동 으로 엽 니 다.golang程序性能分析_第1张图片
그림 에서 메모리 가 가장 많이 차지 하 는 부분 이 어떤 부분 인지 직관 적 으로 발견 할 수 있다.
2.3 CPU 사용 현황 보기
브 라 우 저 에서 링크 열기 http://127.0.0.1:6060/debug/pprof/profile?seconds=5,
프로필 파일 을 다운로드 합 니 다.
여기 서 샘플링 매개 변수 seconds 를 5s 로 지정 합 니 다. 5s 내의 cpu 사용 상황 을 사용 한 다 는 뜻 입 니 다.
다운로드 후 명령 줄 에서 실행:
go tool pprof -http=":8081" profile

다음 그림 과 같이 브 라 우 저 페이지 를 자동 으로 엽 니 다.golang程序性能分析_第2张图片
그림 에서 메모리 가 가장 많이 차지 하 는 부분 이 어떤 부분 인지 직관 적 으로 발견 할 수 있다.
예 프로그램 이 비어 있 기 때문에 이 그림 은 다른 프로그램의 그림 을 빌려 씁 니 다.:)
2.4 현재 프로그램의 실행 추적
브 라 우 저 에서 링크 열기 http://127.0.0.1:6060/debug/pprof/trace?seconds=5trace 파일 을 다운로드 합 니 다.
trace 파일 을 통 해 네트워크 대기 시간, 동기 화 시간, GC 시간 등 각 goroutine 의 실행 시간 상황 을 볼 수 있 습 니 다.
다운로드 후 명령 행 에서 실행: go tool trace -http=":8081" trace다음 그림 과 같이 브 라 우 저 페이지 를 자동 으로 엽 니 다.golang程序性能分析_第3张图片
"Goroutine analysis"를 누 르 면 다음 과 같은 페이지 를 엽 니 다.그림 에 모든 goroutine 을 보 여 줍 니 다.golang程序性能分析_第4张图片
첫 번 째 를 열 면 각 단계 의 시간 소모 상황 표를 볼 수 있다.golang程序性能分析_第5张图片
그림 에서 graph 링크 를 열 면 호출 관계 와 시간 소 모 를 볼 수 있 습 니 다.
golang程序性能分析_第6张图片
3. 총화
본 고 는 pprof 와 trace 의 사용 을 소개 하 였 으 며, 더 자세 한 내용 은 링크 참조: golang 성능 분석 pprof

좋은 웹페이지 즐겨찾기