[Go] 性能/品質檢測

當開發golang程式完成後,其實有一些工具可以查看自己的程式效能,是否有些地方佔了太大的資訊進而改進,另外也可以 透過品質檢測工具去看修改建議;最後,如果有撰寫測試案例的話,也有工具可以產生測試報告,確認測試案例涵蓋了程式多少百分比,還有沒被寫到的地方也可以透過報告顯示出來.

本章介紹:

  • 性能分析工具-pprof 查看CPU/memory 等的瓶頸
  • 檢視go的品質與建議-gosec

性能分析工具-pprof

先在程式碼插入以下程式後執行。

1
2
3
4
5
6
import _ "net/http/pprof"
func main() {
go func() {
http.ListenAndServe("0.0.0.0:8080", nil)
}()
}

開啟http://localhost:8080/debug/pprof/
可以看到一個簡單的分析數字

go tool 看記憶體(heap)

透過以下指令可以看到佔記憶體的前幾名

1
2
3
4
5
6
7
8
9
10
11
$go tool pprof  http://127.0.0.1:8080/debug/pprof/heap<br>

-> 輸入top<br>
-> 輸入web可以看到圖形<br>

(pprof) top<br>

Showing nodes accounting for 1.50MB, 100% of 1.50MB total
flat flat% sum% cum cum%<br>
1.50MB 100% 100% 1.50MB 100% golang.org/x/net/webdav.(*memFile).Write<br>
0 0% 100% 1.50MB 100% github.com/swaggo/files.init.8<br>

go tool 看CPU(profile)

而以下幾令則是幾秒內的CPU計算

1
go tool pprof http://localhost:6060/debug/pprof/profile?seconds=60<br>

網頁版查看 圖表

以上兩種指令其實可以透過以下指令可以開啟一個網頁更容易看到資料的圖表呈現

1
2
3
4
go tool pprof -http=":9099" -seconds=30 http://localhost:8080/debug/pprof/profile
go tool pprof -http=":9099" http://localhost:8088/debug/pprof/heap
go tool pprof -http=":9099" http://localhost:8088/debug/pprof/goroutine

參考文章:


檢視go的品質與建議

1.先下載 go set

go get github.com/securego/gosec/cmd/gosec@v2.2.0

2.輸出報告(可選格式)

1
2
3
gosec -fmt=json -out=results.json ./...<br>
gosec -fmt=html -out=results.html ./...<br>
注意是*三個點
  • 然後打開HTML檔案就可以看到程式品質分析報告了

  • 像是以上這條處理檔案位置時,path應該清理處理過以避免輸入異常

延伸文章

來源 摘要
新手问题 golang内存检测工具 生产环境中使用 pprof 时会遇到一些问题
go pprof与线上事故:一次成功的定位与失败的复现 很多小伙伴担心线上使用pprof会影响性能,担心安全问题。这个在我看来利大于弊,当服务出现问题的时候,资源占用多一点点与能够解决问题相比微不足道,当服务没有问题的时候使用pprof那更没有问题了~
Golang 語言的單元測試和性能測試(也叫 壓力測試) (高級測試技術)
https://etcnotes.com/posts/pprof/ 生成圖
作者

Mini Lab Memo

發表於

2020-09-18

更新於

2023-04-24

許可協議

評論