golang工具 二 PProf效能剖析

2022-09-20 21:22:06 字數 2391 閱讀 4819

應用程式在執行時,總是會出現一些你意想不到的問題,例如:cpu使用率過高,記憶體不斷增大(疑似記憶體洩露),或者是goroutine數量不斷增加(goroutine洩露)。那麼在這些問題出現時如何進行排查呢,這裡介紹pprof工具。

pprof是什麼

pprof是析效能分析資料的工具,可以生成視覺化的文字和圖形報告幫助分析程式問題和資料。

基本使用

_ "net/http/pprof" // 會自動註冊 handler 到 http server,方便通過 http 介面獲取程式執行取樣報告

"runtime"

"time"

)func main()

func loop()

}這裡要在import中新增_ "net/http/pprof"來獲取取樣報告,然後執行程式,訪問檢視報告。

通過web報告分析

allocs:檢視過去所有記憶體分配的樣本。

block:檢視導致阻塞同步的堆疊跟蹤。

cmdline: 當前程式的命令列的完整呼叫路徑。

goroutine:檢視當前所有執行的 goroutines 堆疊跟蹤。

heap:檢視活動物件(堆)的記憶體分配情況。

mutex:檢視導致互斥鎖的競爭持有者的堆疊跟蹤。

profile: 預設進行 30s 的 cpu profiling,得到乙個分析用的 profile 檔案。

threadcreate:檢視建立新 os 執行緒的堆疊跟蹤。

點選頁面的某一項還可以看到更詳細的資訊

通過互交式終端分析

直接通過命令列,來完成對正在執行的應用程式 pprof 的抓取和分析。

_ "net/http/pprof" // 會自動註冊 handler 到 http server,方便通過 http 介面獲取程式執行取樣報告

"runtime"

"time"

)func main()

func g()

}()time.sleep(time.millisecond*5)}}

再起乙個命令列輸入命令:

go tool pprof heap?seconds=60

這裡的heap可以換成上面的goroutine,profile等任意乙個,引數seconds如果不填預設30s。

然後就可以得到互交介面:

上面s**ed profile... 這裡保持了檔案。

type: inuse_space 分析應用程式的常駐記憶體占用情況。

這裡還可以用命令:o tool pprof -alloc_objects heap

(alloc_objects:分析應用程式的記憶體臨時分配情況; inuse_objects:每個函式所分別的物件數量; alloc_space:檢視分配的記憶體空間大小)。

top命令

檢視記憶體使用情況,從高到低排序:

flat:函式自身的執行耗時。

flat%:函式自身在 cpu 執行耗時總比例。

sum%:函式自身累積使用 cpu 總比例。

cum:函式自身及其呼叫函式的執行總耗時。

cum%:函式自身及其呼叫函式的執行耗時總比例。

最後乙個是函式名。

list+函式名 命令

可以具體的看到函式在哪一行消耗的記憶體。

traces 命令

這個命令會列印出對應的所有呼叫棧,以及指標資訊,可以讓我們很便捷的檢視到整個呼叫鏈路有什麼,分別在**使用了多少個記憶體。

通過視覺化介面分析

直接輸入命令:web

然後再輸入web可以看到函式呼叫的流程圖,改圖全面整體的展示了函式的呼叫情況,用線的粗細,顏色表明開銷的大小程度,很形象。

golang 效能分析工具Pprof

pprof是golang程式乙個效能分析的工具,可以檢視堆疊 cpu資訊等 pprof有2個包 net http pprof以及runtime pprof 二者的關係 net http pprof包只是使用runtime pprof包來進行封裝了一下,並在http埠上暴露出來。假如你的go呈現是用h...

golang 效能分析 pprof

如果是使用了http包的路由,則只需要import net http pprof 即可 mutex mutex導致爭用的goroutine堆疊 總的分析思路就是通過top和traces找出關鍵函式,再通過list檢視函式 找到關鍵 行並確認優化方案 top檢視占用最高的num項 traces列印匹配...

工具 pprof 使用總結

pprof 使用總結 作用 cpu分析,按照一定的頻率監聽cpu暫存器使用情況。確定cpu週期花費時間的跟蹤位置。記憶體分析,在應用程式進行堆分配時記錄堆疊跟蹤,用於監視當前和歷史記憶體使用情況,以及檢查記憶體洩漏。阻塞分析,記錄 goroutine 阻塞等待同步 包括定時器通道 的位置 互斥鎖分析...