Go 語言效能分析

pibigstar發表於2019-11-14

1.1 下載go-wrk

這個是用來進行http介面壓測的
官網地址:https://github.com/tsliwowicz/go-wrk
七牛雲下載

使用

go-wrk -d 500 http://localhost:8080/hello

1.2 安裝生成火焰圖工具

1.2.1 下載go-torch

go get github.com/uber/go-torch

1.2.2 安裝perl

官網下載地址:https://www.activestate.com/products/perl/...
七牛雲下載
注意:安裝時記得把新增到環境變數PATH選項勾上

1.2.3 下載FlameGraph

git clone https://github.com/brendangregg/FlameGraph.git

注意:將此資料夾加入到PATH環境變數中

1.3 下載graphviz

生成SVG 圖,能夠更好地看到函式呼叫 CPU 佔用情況

1.3.1 Windows安裝

官網下載地址:https://graphviz.gitlab.io/_pages/Download...
七牛雲下載
安裝好之後,新增其 bin檔案到PATH環境變數中

1.3.2 Linux安裝

# Ubuntu
sudo apt-get install graphviz

# Centos
yum install graphviz

1.3.3 測試

檢查是否安裝成功

dot -version

2.1 開啟效能分析

開啟效能分析只需要匯入下面這個包即可

import _ "net/http/pprof"

2.2 開始壓測

程式碼見文章末尾附錄

  1. 啟動 main.go
  2. 開始壓測
    go-wrk -d 500 http://localhost:8080/hello

2.3 web檢視

瀏覽器開啟:http://localhost:8080/debug/pprof/

  • allocs: 記憶體分配情況
  • block: 導致阻塞同步的堆疊跟蹤
  • cmdline: 當前程式啟用的命令列
  • goroutine: 當前執行的goroutine
  • heap: 存活物件的記憶體分配情況
  • mutex: 互斥鎖的競爭持有者的堆疊跟蹤
  • profile: 預設進行 30s 的 CPU Profiling
  • threadcreate: 作業系統執行緒跟蹤
  • trace: 當前程式執行情況
  • full goroutine stack dump: 所有goroutine棧輸出

    2.4 取樣分析

    下面命令會開啟一個互動頁面

    go tool pprof --seconds 5 http://localhost:8080/debug/pprof/profile

    常用命令

  • top 預設顯示 10 個佔用 CPU 時間最多的函式
  • tree 樹形結構檢視goroutine情況。
  • web 生成SVG函式呼叫圖(需安裝graphviz
  • exit 退出分析

開啟pprof視覺化頁面,與上面 可互動頁面中web命令效果一樣

go tool pprof -http=:8080 http://localhost:8080/debug/pprof/profile?seconds=60

2.5 生成火焰圖

進行 5 秒鐘的 CPU 效能取樣並生成火焰圖

go-torch --seconds 5 http://localhost:8080/debug/pprof/profile

命令執行完會在該目錄下生成一個torch.svg檔案,可用瀏覽器開啟檢視火焰圖

  1. 生成 pprof.cpu檔案
    go test -bench . -benchmem -cpuprofile pprof.cpu
  2. 分析pprof.cpu檔案
    go tool pprof pprof.cpu

程式碼

https://github.com/pibigstar/go-demo/tree/...

相關文章