GO · 성능
프로파일링 도구 종합
Go의 성능 분석 도구 체인 총정리. pprof, trace, benchstat을 통합적으로 활용합니다.
성능고급profilingtoolspproftracebenchstat
핵심 설명
Go의 성능 분석 도구 체인 총정리. pprof, trace, benchstat을 통합적으로 활용합니다.
Go code
package main
import "fmt"
func main() {
fmt.Println("=== Go 프로파일링 도구 체인 ===")
fmt.Println()
fmt.Println("1. CPU 프로파일링:")
fmt.Println(" go test -cpuprofile=cpu.prof -bench=.")
fmt.Println(" go tool pprof -http=:8080 cpu.prof")
fmt.Println()
fmt.Println("2. 메모리 프로파일링:")
fmt.Println(" go test -memprofile=mem.prof -bench=.")
fmt.Println(" go tool pprof -http=:8080 mem.prof")
fmt.Println()
fmt.Println("3. 실행 트레이스:")
fmt.Println(" go test -trace=trace.out -bench=.")
fmt.Println(" go tool trace trace.out")
fmt.Println()
fmt.Println("4. 벤치마크 비교:")
fmt.Println(" go test -bench=. -count=5 -benchmem | tee old.txt")
fmt.Println(" benchstat old.txt new.txt")
fmt.Println()
fmt.Println("5. 컴파일러 분석:")
fmt.Println(" go build -gcflags='-m' # 이스케이프 분석")
fmt.Println(" go build -gcflags='-m -l=4' # 인라인 결정")
fmt.Println(" go build -gcflags='-S' # 어셈블리")
fmt.Println()
fmt.Println("6. 런타임 HTTP 프로파일링:")
fmt.Println(" import _ "net/http/pprof"")
fmt.Println(" go tool pprof http://localhost:6060/debug/pprof/heap")
fmt.Println(" go tool pprof http://localhost:6060/debug/pprof/goroutine")
fmt.Println()
fmt.Println("최적화 순서: 측정 → 분석 → 개선 → 재측정")
}학습 팁
최적화 순서: 1) 알고리즘/자료구조, 2) 할당 줄이기, 3) 동시성 개선, 4) 컴파일러 힌트. 항상 측정 먼저!
주의할 점
측정 없이 최적화하면 효과 없는 곳에 시간을 낭비합니다. "추측하지 말고 측정하라(Don't guess, measure)"를 명심하세요.
자주 묻는 질문
프로파일링 도구 종합란 무엇인가요?
Go의 성능 분석 도구 체인 총정리. pprof, trace, benchstat을 통합적으로 활용합니다.
프로파일링 도구 종합 학습 시 주의할 점은 무엇인가요?
측정 없이 최적화하면 효과 없는 곳에 시간을 낭비합니다. "추측하지 말고 측정하라(Don't guess, measure)"를 명심하세요.