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
다음 그림 과 같이 브 라 우 저 페이지 를 자동 으로 엽 니 다.
그림 에서 메모리 가 가장 많이 차지 하 는 부분 이 어떤 부분 인지 직관 적 으로 발견 할 수 있다.
2.3 CPU 사용 현황 보기
브 라 우 저 에서 링크 열기
http://127.0.0.1:6060/debug/pprof/profile?seconds=5
,프로필 파일 을 다운로드 합 니 다.
여기 서 샘플링 매개 변수
seconds
를 5s 로 지정 합 니 다. 5s 내의 cpu 사용 상황 을 사용 한 다 는 뜻 입 니 다.다운로드 후 명령 줄 에서 실행:
go tool pprof -http=":8081" profile
다음 그림 과 같이 브 라 우 저 페이지 를 자동 으로 엽 니 다.
그림 에서 메모리 가 가장 많이 차지 하 는 부분 이 어떤 부분 인지 직관 적 으로 발견 할 수 있다.
예 프로그램 이 비어 있 기 때문에 이 그림 은 다른 프로그램의 그림 을 빌려 씁 니 다.:)
2.4 현재 프로그램의 실행 추적
브 라 우 저 에서 링크 열기
http://127.0.0.1:6060/debug/pprof/trace?seconds=5
trace 파일 을 다운로드 합 니 다.trace 파일 을 통 해 네트워크 대기 시간, 동기 화 시간, GC 시간 등 각 goroutine 의 실행 시간 상황 을 볼 수 있 습 니 다.
다운로드 후 명령 행 에서 실행:
go tool trace -http=":8081" trace
다음 그림 과 같이 브 라 우 저 페이지 를 자동 으로 엽 니 다. "Goroutine analysis"를 누 르 면 다음 과 같은 페이지 를 엽 니 다.그림 에 모든 goroutine 을 보 여 줍 니 다.
첫 번 째 를 열 면 각 단계 의 시간 소모 상황 표를 볼 수 있다.
그림 에서
graph
링크 를 열 면 호출 관계 와 시간 소 모 를 볼 수 있 습 니 다.3. 총화
본 고 는 pprof 와 trace 의 사용 을 소개 하 였 으 며, 더 자세 한 내용 은 링크 참조: golang 성능 분석 pprof
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
gin과 firestore 연동하기왜 두개를 연결하게 되었나요 클론 프로젝트를 진행하게 되면서 백단은 golang을 이용한 gin으로 restful을 활용하기로 정했는데, 역시 여러명이 하는거다보니 db를 무엇으로할지 고민이 되었다 rdbms는 익숙...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.