安裝 graphviz
brew install graphviz // for macos
apt install graphviz // for ubuntu
yum install graphviz // for centos
設置svg文件默認打開程序
右鍵svg文件 ->顯示簡介->默認程序
//main.go 文件
package main
import (
// 略
_ "net/http/pprof" // 會自動注冊 handler 到 http server,方便通過 http 接口獲取程序運行采樣報告
// 略
)
func main() {
// 略
runtime.GOMAXPROCS(1) // 限制 CPU 使用數,避免過載
runtime.SetMutexProfileFraction(1) // 開啟對鎖調用的跟蹤
runtime.SetBlockProfileRate(1) // 開啟對阻塞操作的跟蹤
go func() {
// 啟動一個 http server,注意 pprof 相關的 handler 已經自動注冊過了
if err := http.ListenAndServe(":6060", nil); err != nil {
log.Fatal(err)
}
os.Exit(0)
}()
// 略
}
打開瀏覽器訪問 http://localhost:6060/debug/pprof/
交互式終端
go tool pprof http://localhost:6060/debug/pprof/profile
go tool pprof http://localhost:6060/debug/pprof/heap
go tool pprof http://localhost:6060/debug/pprof/allocs
go tool pprof http://localhost:6060/debug/pprof/goroutine
go tool pprof http://localhost:6060/debug/pprof/mutex
go tool pprof http://localhost:6060/debug/pprof/block
命令: top/list/web
火焰圖
go tool pprof -http=:8081 ~/pprof/[文件路徑名].pb.gz
內存記錄工具 prog_mem.sh
#!/bin/bash
prog_name="your_programe_name"
prog_mem=$(pidstat -r -u -h -C $prog_name |awk 'NR==4{print $12}')
time=$(date "+%Y-%m-%d %H:%M:%S")
echo $time"\tmemory(Byte)\t"$prog_mem >>~/record/prog_mem.log
使用crontab建立定時任務,每分鍾記錄1次。使用crontab -e編輯crontab配置,在最后增加1行:
*/1 * * * * ~/record/prog_mem.sh
腳本輸出的內容保存在prog_mem.log。如果需要可視化,可以直接黏貼prog_mem.log內容到Excel等表格工具,繪制內存占用圖
參考鏈接
https://blog.wolfogre.com/posts/go-ppof-practice/
https://book.eddycjy.com/golang/tools/go-tool-pprof.html
https://segmentfault.com/a/1190000019222661