為golang程式使用pprof遠端檢視httpserver執行堆疊,cpu耗時等資訊
阿新 • • 發佈:2019-01-09
pprof是個神馬玩意兒?
pprof - manual page for pprof (part of gperftools)
是gperftools工具的一部分
These tools are for use by developers so that they can create more robust applications. Especially of use to those developing multi-threaded applications in C++ with templates. Includes TCMalloc, heap-checker, heap-profiler and cpu-profiler.
一個性能分析的工具,可以檢視堆疊、cpu資訊等等。
在golang中如何使用呢?下面就來看看。
1. 在一個httpserver中,只需要一行程式碼
package main import ( "flag" "log" "net/http" _ "net/http/pprof" "sync" "time" ) func main() { flag.Parse() //這裡實現了遠端獲取pprof資料的介面 go func() { log.Println(http.ListenAndServe("localhost:6060", nil)) }() var wg sync.WaitGroup wg.Add(10) for i := 0; i < 10; i++ { go work(&wg) } wg.Wait() // Wait to see the global run queue deplete. time.Sleep(3 * time.Second) } func work(wg *sync.WaitGroup) { time.Sleep(time.Second) var counter int for i := 0; i < 1e10; i++ { time.Sleep(time.Millisecond * 100) counter++ } wg.Done() }
2.編譯執行這個程式
go build trace_example.go
./trace_example
3. 通過瀏覽器訪問
http://localhost:6060/debug/pprof/
能夠檢視到程式的overview
4.你也可以通過終端命令檢視
Then use the pprof tool to look at the heap profile:
Or to look at a 30-second CPU profile:
Or to look at the goroutine blocking profile:
[email protected]:~/gocode $go tool pprof http://localhost:6060/debug/pprof/profile Read http://localhost:6060/debug/pprof/symbol Gathering CPU profile from http://localhost:6060/debug/pprof/profile?seconds=30 for 30 seconds to /var/folders/2l/195zcc1n0sn2wjfjwf9hl9d80000gn/T/mmBnpdkv0D Be patient... Wrote profile to /var/folders/2l/195zcc1n0sn2wjfjwf9hl9d80000gn/T/mmBnpdkv0D Welcome to pprof! For help, type 'help'. (pprof) top10 Total: 9 samples 6 66.7% 66.7% 6 66.7% runtime.mach_semaphore_wait 1 11.1% 77.8% 1 11.1% runtime.kevent 1 11.1% 88.9% 1 11.1% runtime.mach_semaphore_signal 1 11.1% 100.0% 1 11.1% runtime.mach_semaphore_timedwait 0 0.0% 100.0% 7 77.8% System 0 0.0% 100.0% 1 11.1% notetsleep 0 0.0% 100.0% 1 11.1% ready 0 0.0% 100.0% 2 22.2% runtime.gosched0 0 0.0% 100.0% 1 11.1% runtime.mach_semrelease 0 0.0% 100.0% 1 11.1% runtime.notetsleepg (pprof) web Total: 9 samples Loading web page file:////var/folders/2l/195zcc1n0sn2wjfjwf9hl9d80000gn/T/SlFUZhzBDB.0.svg
web命令生成了很cool的svg圖片,在瀏覽器中開啟。
除了遠端拉取,你還可以自己編寫程式碼,把這些資料寫入檔案(實現 net/http/pprof 中的幾個路由,開啟或關閉追蹤資訊)。 具體可參考:http://blog.golang.org/profiling-go-programs https://github.com/hyper-carrot/go_command_tutorial/blob/master/0.12.md 期間:web命令依賴一個svg生成包,在mac下面,你可以通過http://www.graphviz.org/Download_macos.php進行下載。