1. 程式人生 > >為golang程式使用pprof遠端檢視httpserver執行堆疊,cpu耗時等資訊

為golang程式使用pprof遠端檢視httpserver執行堆疊,cpu耗時等資訊

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進行下載。