Kim Seogyu
Backend

Go pprof를 활용한 성능 프로파일링 가이드

Go 서비스에서 pprof로 CPU/메모리/락 병목을 찾는 실전 절차를 정리합니다.

Published 2025년 12월 30일2 min read210 words

Go pprof를 활용한 성능 프로파일링 가이드

원칙

추측으로 최적화하지 말고 먼저 측정합니다. pprof는 "어디서 느린지"를 함수 단위로 보여주는 근거입니다.

1) 최소 설정

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

go func() {
	_ = http.ListenAndServe("127.0.0.1:6060", nil)
}()

운영에서는 반드시 내부망 또는 인증 뒤에서만 엽니다.

2) CPU 프로파일

go tool pprof "http://127.0.0.1:6060/debug/pprof/profile?seconds=30"

기본 명령:

(pprof) top
(pprof) top -cum
(pprof) list <func>
(pprof) web

해석 포인트:

  • flat 높음: 해당 함수 자체가 병목
  • cum 높음: 하위 호출 구조가 병목

3) 메모리 프로파일

go tool pprof http://127.0.0.1:6060/debug/pprof/heap
go tool pprof -alloc_space http://127.0.0.1:6060/debug/pprof/heap

alloc_space가 높으면 누수보다 "할당 폭탄"일 가능성이 큽니다.

4) 락/블로킹 분석

runtime.SetBlockProfileRate(1)
runtime.SetMutexProfileFraction(10)
go tool pprof http://127.0.0.1:6060/debug/pprof/block
go tool pprof http://127.0.0.1:6060/debug/pprof/mutex

5) 실무 워크플로우

  1. 재현 가능한 부하 시나리오 준비
  2. Before profile 수집
  3. 가설 1개만 반영
  4. After profile 수집
  5. 개선 수치 확인 후 다음 가설 진행

이 순서를 지키면 "최적화했는데 느려짐" 회귀를 줄일 수 있습니다.

흔한 실수

  • 프로파일 1회 결과로 결론 내기
  • 핫패스 검증 없이 sync.Pool 남발
  • pprof를 외부에 공개

요약

pprof는 성능 도구라기보다 의사결정 도구입니다. "측정 -> 변경 -> 재측정" 루틴을 팀 표준으로 만들면 성능 이슈 대응 속도가 눈에 띄게 빨라집니다.

Share

Related Articles

Comments

이 블로그는 제가 알고 있는 것들을 잊지 않기 위해 기록하는 공간입니다.
직접 작성한 글도 있고, AI의 도움을 받아 정리한 글도 있습니다.
정확하지 않은 내용이 있을 수 있으니 참고용으로 봐주세요.

© 2026 Seogyu Kim