프로파일링 방법 30초만에 pprof와 함께 하세요
2791 단어 tutorialgotoolingperformance
pprof
를 가리키는 것 같습니다.프로파일링하려는 코드가 다음과 같다고 가정해 보겠습니다.
package main
import (
"fmt"
"sync"
"time"
)
// Some function that does work
func hardWork(wg *sync.WaitGroup) {
defer wg.Done()
fmt.Printf("Start: %v\n", time.Now())
// Memory
a := []string{}
for i := 0; i < 500000; i++ {
a = append(a, "aaaa")
}
// Blocking
time.Sleep(2 * time.Second)
fmt.Printf("End: %v\n", time.Now())
}
func main() {
var wg sync.WaitGroup
wg.Add(1)
go hardWork(&wg)
wg.Wait()
}
이제 프로필을 작성해 보겠습니다. 그렇게 하려면 다음이 필요합니다.
apt-get install graphviz gv
(데비안) 또는 brew install graphviz
(맥) go get -u github.com/google/pprof
import _ "net/http/pprof"
pprof
에 대한 서버 추가:go func() {
fmt.Println(http.ListenAndServe("localhost:6060", nil))
}()
다음과 같아야 합니다.
package main
import (
"fmt"
"net/http"
"sync"
"time"
_ "net/http/pprof"
)
// Some function that does work
func hardWork(wg *sync.WaitGroup) {
defer wg.Done()
fmt.Printf("Start: %v\n", time.Now())
// Memory
a := []string{}
for i := 0; i < 500000; i++ {
a = append(a, "aaaa")
}
// Blocking
time.Sleep(2 * time.Second)
fmt.Printf("End: %v\n", time.Now())
}
func main() {
var wg sync.WaitGroup
// Server for pprof
go func() {
fmt.Println(http.ListenAndServe("localhost:6060", nil))
}()
wg.Add(1) // pprof - so we won't exit prematurely
wg.Add(1) // for the hardWork
go hardWork(&wg)
wg.Wait()
}
서버가 실행 중인 동안
go tool pprof http://localhost:6060/debug/pprof/heap
를 입력한 다음(다른 터미널에서) png
를 입력하면 다음과 같은 내용이 표시됩니다.보시다시피
hardWork
가 약간의 메모리를 사용하고 있습니다.고루틴을 확인하고 싶다면 줄을 다음과 같이 바꿀 수 있습니다.
go tool pprof http://localhost:6060/debug/pprof/goroutine
다음 중에서 선택할 수 있습니다.
profile?seconds=10
heap
goroutine
block
mutex
trace?seconds=5
Reference
이 문제에 관하여(프로파일링 방법 30초만에 pprof와 함께 하세요), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/agamm/how-to-profile-go-with-pprof-in-30-seconds-592a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)