天天看點

go語言中性能分析工具pprof使用心得

作者:石老師小跟班
pprof是一個go程式性能分析工具,可以用于分析go程式的CPU使用率、記憶體使用情況等

項目中如何使用pprof

package main

import (
	"log"
	"net/http"
	_ "net/http/pprof" //初始化包
	"os"
	"runtime"
)

func main() {
	runtime.GOMAXPROCS(1)              //設定隻使用1個cpu
	runtime.SetBlockProfileRate(1)     //開啟對阻塞的追蹤
	runtime.SetMutexProfileFraction(1) //開啟對鎖的追蹤
	go func() {
		//啟動一個http.server
		if err := http.ListenAndServe(":6060", nil); err != nil {
			log.Fatal(err)
		}
		os.Exit(0)
	}()
  //測試用
	for {	}
}
           

使用pprof

使用 go build 進行建構

浏覽器打開 http://localhost:8080/debug/pprof/,即可看到如下頁面

go語言中性能分析工具pprof使用心得
名額說明:
 allocs	記憶體配置設定情況的采樣資訊	可以用浏覽器打開,但可讀性不高
blocks	阻塞操作情況的采樣資訊	可以用浏覽器打開,但可讀性不高
cmdline	顯示程式啟動指令及參數	可以用浏覽器打開,這裡會顯示 ./go-pprof-practice
goroutine	目前所有協程的堆棧資訊	可以用浏覽器打開,但可讀性不高
heap	堆上記憶體使用情況的采樣資訊	可以用浏覽器打開,但可讀性不高
mutex	鎖争用情況的采樣資訊	可以用浏覽器打開,但可讀性不高
profile	CPU 占用情況的采樣資訊	浏覽器打開會下載下傳檔案
threadcreate	系統線程建立情況的采樣資訊	可以用浏覽器打開,但可讀性不高
trace 程式運作跟蹤資訊	浏覽器打開會下載下傳檔案           

用法一: 排查CPU占用過高

//指令
go tool pprof http://localhost:6060/debug/pprof/profile
//再輸入 top
//再輸入 list 辨別名 即可查詢到相關詳細資訊,如下圖顯示,可以找到哪裡占用cpu比較高,可以看到,
//這裡有一個大循環,是占用大量cpu的,           
go語言中性能分析工具pprof使用心得

用法二: 排查占用記憶體過高

//指令一樣,隻不過 list的對象名不同而已
//1.  go tool pprof http://localhost:6060/debug/pprof/heap
//2. top  
//3. list 對象名           
go語言中性能分析工具pprof使用心得

用法三: 排查頻繁記憶體回收

通過如下指令 GODEBUG=gctrace=1 ./main | grep gc 可以檢視到程式的記憶體回收情況
//指令一樣,隻不過 list的對象名不同而已
//1.  go tool pprof http://localhost:6060/debug/pprof/allocs
//2. top  
//3. list 對象名           
go語言中性能分析工具pprof使用心得

用法四: 排查協程洩露

//指令一樣,隻不過 list的對象名不同而已
//1.  go tool pprof http://localhost:6060/debug/pprof/goruntine
//2. top  
//3. list 對象名           
go語言中性能分析工具pprof使用心得

用法五: 排查鎖的争用

//指令一樣,隻不過 list的對象名不同而已
//1.  go tool pprof http://localhost:6060/debug/pprof/mutex
//2. top  
//3. list 對象名           
go語言中性能分析工具pprof使用心得

用法六: 排查阻塞的情況

//指令一樣,隻不過 list的對象名不同而已
//1.  go tool pprof http://localhost:6060/debug/pprof/block
//2. top  
//3. list 對象名           
go語言中性能分析工具pprof使用心得

結語:

其實還有 火焰圖等相關知識,但是本次遇到的bug,沒有用到,這裡就不寫了,感興趣的小夥伴,可以自己查資料哈

繼續閱讀