前言 大晚上的,老是刷到有關pprof的文章,忍不住看了幾篇文章...寫個學習筆記記錄下~ 正文: 1.pprof是什麼? pprof是go內置的性能調優工具,可以藉助一些工具以圖形化的方式展示出來某些介面占用cpu資源的詳情。 2.專項用途: 1.cpu 主要測試占用cpu資源比較多的函數或者數據 ...
前言
大晚上的,老是刷到有關pprof的文章,忍不住看了幾篇文章...寫個學習筆記記錄下~
正文:
1.pprof是什麼?
pprof是go內置的性能調優工具,可以藉助一些工具以圖形化的方式展示出來某些介面占用cpu資源的詳情。
2.專項用途:
1.cpu
主要測試占用cpu資源比較多的函數或者數據,可以推出當前程式的熱點數據
2.記憶體
主要測試堆記憶體的使用以及分配情況
3.阻塞
主要測試goroutine的使用情況,分析系統的併發瓶頸
3.使用方式
1.命令行
這個不介紹了,後面都要使用命令行.先看個例子
func readMemStats() { // MemStats 描述記憶體信息的靜態變數 var ms runtime.MemStats // 讀取某一時刻記憶體情況的快照 runtime.ReadMemStats(&ms) // alloc占用記憶體情況、堆空閑情況、堆釋放情況 log.Printf("========> Alloc:%d(bytes) HeapIdle:%d(bytes) HeapReleased:%d(bytes)", ms.Alloc, ms.HeapIdle, ms.HeapReleased) }
// append的擴容情況 func test() { container := make([]int, 8) log.Println("========> loop begin .") // 追加元素 for i := 0; i < 32*1000*1000; i++ { container = append(container, i) if i == 16*1000*1000 { readMemStats() } } log.Println("==========> loop end.") } func main() { log.Println("============> [start].")
// 開始時候的記憶體占用情況 readMemStats()
// 調用append時候的情況 test() readMemStats() log.Println("============> [force.gc].") // 強制開啟gc runtime.GC() log.Println("===========>[Done] .") readMemStats() go func() { for { readMemStats() time.Sleep(10 * time.Second) } }() time.Sleep(3600 * time.Second) }
看下具體情況:
上面顯示的參數中可以看到記憶體的使用情況。分別是分配、空閑、釋放
我們可以也可以通過訪問相應的地址,在界面上看到相應的信息,來看下一種方式:
2.網路方式
只需要在上面代碼加入監聽語句,並導入 net/http/pprof庫即可。下麵是僅僅展示了main函數部分
import ( "log" "net/http" _ "net/http/pprof" "runtime" "time" ) func main() { // 啟動 pprof,這種是採用網路監聽的方式,可以通過訪問界面顯示出測試的數據 go func() { log.Println(http.ListenAndServe("localhost:8080", nil)) }() log.Println("============> [start].") readMemStats() test() readMemStats() log.Println("============> [force.gc].") // 強制開啟gc runtime.GC() log.Println("===========>[Done] .") readMemStats() go func() { for { readMemStats() time.Sleep(10 * time.Second) } }() time.Sleep(3600 * time.Second) }
下麵讓我們來執行下:
運行程式後,訪問上面路徑的時候可以加上 /debug/pprof。這個是pprof預設的網頁地址,當然不止這一個,其他的大家可以查詢下,我就不過多介紹了~
我們可以在下麵看到各個文件的解釋,圈起來的是有關cpu性能分析的文件。我們可以點擊下載下。
3.互動式
1.首先我們把剛纔下載的cpu相關的文件,移動到當前目錄下
2.然後執行:
蕪湖~起飛.這個時候我們已經進入交互模式,輸入 top 查看當前程式的執行情況
涉及的參數的意思,大家可以私下去查詢下~
如果想要以圖形化的方式展示呢,輸入web:
可以看到相關的分析圖,方框越大,占用cpu資源越多喲~
如果輸入web,顯示沒有svg的話,可以下載 graphviz。配置好環境變數後,重啟電腦,再次輸入web即可
好了,關於pprof的簡單使用就到這裡嘍,對了上面的程式參考的是這裡 : https://www.bookstack.cn/read/aceld-golang/README.md
下次再見~
|不驕不躁,保持學習