gf架構之服務效能分析 - 可供選擇的pprof特性

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

文章來源:http://gf.johng.cn/592298

ghttp包提供了非常強大和簡便的服務效能分析功能,內部完美整合了pprof效能分析工具,可以在任何時候通過EnablePprof方法啟用效能分析特性,並可自訂效能分析工具頁面路由地址,不傳遞路由地址時,預設URI地址為/debug/pprof

我們來看一個簡單的例子:

package mainimport (    "gitee.com/johng/gf/g/net/ghttp")func main() {    s := ghttp.GetServer()    s.EnablePprof()    s.BindHandler("/", func(r *ghttp.Request){        r.Response.Writeln("哈嘍世界!")    })    s.SetPort(8199)    s.Run()}

這個例子使用了s.EnablePprof()啟用了效能分析,預設會自動註冊以下幾個路由規則:

/debug/pprof/*action/debug/pprof/cmdline/debug/pprof/profile/debug/pprof/symbol/debug/pprof/trace

其中/debug/pprof/*action為頁面訪問的路由,其他幾個地址為go tool pprof命令準備的。簡單的效能分析我們直接存取/debug/pprof地址即可,內容如下:

  1. pprof頁面
  2. 堆使用量
  3. 當前進程中的goroutine詳情

如果想要進行詳細的效能分析,基本上離不開go tool pprof命令列工具的支援,在開啟效能分析支援後,我們可以使用以下命令執行效能採集分析:

go tool pprof "http://127.0.0.1:8199/debug/pprof/profile"

執行後pprof工具經過約30秒左右的介面資訊採集(這30秒期間Web Server應當有流量進入,我們這裡不停地訪問hello world頁面以作測試),然後產生效能分析報告,隨後可以通過top10/web等pprof命令查看報告結果,更多命令可使用go tool pprof查看。關於pprof的詳細使用介紹,請查看golang官方:blog.golang.org/profiling-go-programs

本樣本中的命令列效能分析結果如下:

john@johnhome:~/Workspace/Go/gf$ go tool pprof "http://127.0.0.1:8199/debug/pprof/profile"Fetching profile over HTTP from http://127.0.0.1:8199/debug/pprof/profileSaved profile in /home/john/pprof/pprof.___go_build_pprof_go.samples.cpu.001.pb.gzFile: ___go_build_pprof_goType: cpuTime: Apr 17, 2018 at 10:53pm (CST)Duration: 30s, Total samples = 80ms ( 0.27%)Entering interactive mode (type "help" for commands, "o" for options)(pprof) top10Showing nodes accounting for 80ms, 100% of 80ms totalShowing top 10 nodes out of 49      flat  flat%   sum%        cum   cum%      10ms 12.50% 12.50%       10ms 12.50%  gitee.com/johng/gf/g/net/ghttp.(*Cookie).Get /home/john/Workspace/Go/GOPATH/src/gitee.com/johng/gf/g/net/ghttp/http_server_cookie.go      10ms 12.50% 25.00%       10ms 12.50%  internal/poll.runtime_pollReset /home/john/Softs/go1.9.2/src/runtime/netpoll.go      10ms 12.50% 37.50%       10ms 12.50%  runtime.futex /home/john/Softs/go1.9.2/src/runtime/sys_linux_amd64.s      10ms 12.50% 50.00%       10ms 12.50%  runtime.getitab /home/john/Softs/go1.9.2/src/runtime/iface.go      10ms 12.50% 62.50%       10ms 12.50%  runtime.newarray /home/john/Softs/go1.9.2/src/runtime/slice.go      10ms 12.50% 75.00%       10ms 12.50%  runtime.rawstringtmp /home/john/Softs/go1.9.2/src/runtime/string.go      10ms 12.50% 87.50%       10ms 12.50%  runtime.usleep /home/john/Softs/go1.9.2/src/runtime/sys_linux_amd64.s      10ms 12.50%   100%       10ms 12.50%  sync.(*RWMutex).Lock /home/john/Softs/go1.9.2/src/sync/rwmutex.go         0     0%   100%       10ms 12.50%  bufio.(*Writer).Flush /home/john/Softs/go1.9.2/src/bufio/bufio.go         0     0%   100%       10ms 12.50%  gitee.com/johng/gf/g/container/gqueue.(*Queue).PopFront /home/john/Workspace/Go/GOPATH/src/gitee.com/johng/gf/g/container/gqueue/gqueue.go(pprof) webFailed to execute dot. Is Graphviz installed? Error: exec: "dot": executable file not found in $PATH(pprof) web (pprof) 

其中web命令用以圖形展示介面之間的調用關係以及效能情況,但是需要安裝Graphviz圖形化工具,以我目前的系統為ubuntu為例,直接執行sudo apt-get install Graphviz命令即可安裝完成圖形化工具,隨後再次使用web命令,最終產生以表:

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.