goμΈμ΄λ‘ μ§ μμ€λ₯Ό νλ‘νμΌλ§νλ λ°©λ² μ 리π
β "νλ‘νμΌλ§" : λ©λͺ¨λ¦¬ μ¬μ©λ, ν¨μλ³ CPU μ μ μκ°, tracing λ± μ΄ν리μΌμ΄μ μ λμ μΌλ‘ λΆμνλ κ²
μ΄λ₯Ό μ νμ©νλ€λ©΄ CPU μ¬μ©λΆλΆ,λ©λͺ¨λ¦¬ λμ λ°κ²¬νκ³ ,μ₯κΈ°κ° μμ μ μΌλ‘ μ μ§λλλ‘ κ°λ°νλ λ°μ λ§€μ° μ μ©ν¨β
- go tool pprof νλ‘κ·Έλ¨
- runtime/pprof ν¨ν€μ§
- net/http/pprof ν¨ν€μ§
- test ν¨ν€μ§
- νλ‘νμΌμ μκ°νν΄μ£Όλ ν΄λ‘μ¨, golang μ€μΉμ κ°μ΄ μ€μΉλ¨
- λ¨Όμ μ¬μ©νκΈ° μ μ, graphvizλ₯Ό μ€μΉν΄μΌ ν¨
- μ€μΉκ° μλμ΄μμΌλ©΄, νλ‘νμΌ μ μλ¬λ°μν¨ (graphvizκ° μ€μΉλμ΄μμ§ μλ€, μ€μΉν΄μΌλλ€λ κ΄λ ¨ μλ¬λ©μμ§κ° λ° κ²μ)
- 2~4λ₯Ό ν΅ν΄ μ»μ νλ‘νμΌ νμΌλ€μ μκ°νν΄μ£Όλ ν΄λ‘ μκ°νλ©΄ λ¨
- λͺ
λ Ήμ΄
go tool pprof -http :<port> <profile File>
- "localhost:"μ μ μν΄μ μ λν μκ°νλ νλ‘νμΌμ νμΈν μ μμ.
go tool pprof -http :<port> <profile HTTP Endpoint>
- "localhost:"μ μ μν΄μ μ λν μκ°νλ νλ‘νμΌμ νμΈν μ μμ.
- μκ°νλ νλ‘νμΌμ μ΄ν΄νκΈ°μν΄ μμμΌλ κ°λ
- Flat : ν¨μκ° μ§μ μ μΌλ‘ μννλ λΆλΆμ λν λΆν
- Cum : ν¨μκ° μ€νλκΈ° μν΄ μνλλ λͺ¨λ λΆλΆμ λν λΆν
func FuncA() { // FuncA()μ λν Cumμ FuncA() μ 체μ λν λΆνλ₯Ό λ»νκ³ FuncB() FuncC() a:= "sujiny-tech" // FuncA()μ λν Flatμ μ§μ μ μΌλ‘ λ³μλ₯Ό μ μΈνλ κ²μ²λΌ, b:= 2023 // μ§μ μ μΌλ‘ μννλ λΆλΆμ λν λΆνλ₯Ό λ»ν¨! ... }
-
runtime/pprof ν¨ν€μ§λ CLIμ κ°μ΄ νλ² μ€νλκ³ , μ’ λ£λλ App νλ‘νμΌμ μν΄ μ¬μ©λλ ν¨ν€μ§
-
ν΄λΉνλ ν¨ν€μ§μμλ CPU, Memory Heapμ λν νλ‘νμΌλ§ μ»μ μ μμ
-
cpu νλ‘νμΌ μ€μ
- memory νλ‘νμΌ μ€μ
go tool pprof -http :8080 cpu.out
: CPU μ¬μ©λ λ± νλ‘νμΌλ§(cpu.outμ κ²°κ³Όκ° λ°μ΄λ리 νμΌλ‘ μμ±λλ©΄μ, ν΄λΉ ν¬νΈμ μΉμ¬μ΄νΈλ₯Ό λμ)go tool pprof -hhtp :9090 mem.out
: Memory μ¬μ©λ λ± νλ‘νμΌλ§(mem.outμ κ²°κ³Όκ° λ°μ΄λ리 νμΌλ‘ μμ±λλ©΄μ, ν΄λΉ ν¬νΈμ μΉμ¬μ΄νΈλ₯Ό λμ)
- net/http/pprof ν¨ν€μ§λ μλ²μ κ°μ΄ κ³μ λμμ€μΈ Appμ νλ‘νμΌμ μν΄ μ¬μ©λλ ν¨ν€μ§
- http Handler νμμ λ€μν νλ‘νμΌμ μ»μ μ μλ Endpointλ₯Ό λ±λ‘νλ©΄ λ¨
/debug/pprof/profile
: cpu νλ‘νμΌ/debug/pprof/heap
: λ©λͺ¨λ¦¬ ν νλ‘νμΌ/debug/pprof/block
: block νλ‘νμΌ/debug/pprof/threadcreate
: thread νλ‘νμΌ/debug/pprof/goroutine
: goroutine νλ‘νμΌ/debug/pprof/mutex
: mutex νλ‘νμΌ
- go test μμ λ¨μν μ€νΈ μ€ν μ, νλ‘νμΌλ§ μνλ κ°λ₯ν¨
go test ./... -cpuprofile cpu.out -memprofile mem.out -blockprofile block.out -mutexprofile mutex.out
λ₯Ό ν΅ν΄ νλ‘νμΌμ μ»μ μ μμgo tool pprof http :8080 cpu.out