您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關Go語言的性能分析工具pprof怎么用,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
pprof:是Go的性能分析工具,在程序運行過程中,可以記錄程序的運行信息,可以是CPU使用情況、內存使用情況、goroutine運行情況等,Go語言已經將pprof 封裝在包net/http/pprof中。
對于pprof來說主要用于:CPU分析、內存分析、阻塞分析、互斥鎖分析。
查看這些指標有兩種方式,一種是瀏覽器方式,一種是命令行方式。
瀏覽器方式:
通過 http://pprofIPAddress:port/debug/pprof/ 來訪問,訪問之后的界面如下所示:
命令行方式:
基本命令:
# 下載cpu profile,默認從當前開始收集30s的cpu使用情況,需要等待30sgo tool pprof http://localhost:6060/debug/pprof/profile# 30-second CPU profile go tool pprof http://localhost:6060/debug/pprof/profile?seconds=120# wait 120s# 下載heap profile go tool pprof http://localhost:6060/debug/pprof/heap# heap profile# 下載goroutine profile go tool pprof http://localhost:6060/debug/pprof/goroutine# goroutine profile# 下載block profile go tool pprof http://localhost:6060/debug/pprof/block# goroutine blocking profile# 下載mutex profile go tool pprof http://localhost:6060/debug/pprof/mutex
本篇文章算是pprof的入門篇章,主要講解CPU分析和內存分析兩部分的使用方法。
這里的內存指的是Go中的堆數據,例子如下所示:
package main
import (
"fmt"
"time"
"sync"
"net/http"
_ "net/http/pprof"
)
var buf []byte
func Add() {
tick := time.Tick(time.Second / 200)
for range tick {
buf = append(buf, make([]byte, 2*1024*1024)...)
}
}
func main() {
// 開啟pprof,監聽請求
var wg sync.WaitGroup
wg.Add(1)
go func() {
defer wg.Done()
ip := "0.0.0.0:6060"
if err := http.ListenAndServe(ip, nil); err != nil {
fmt.Printf("start pprof failed on %s\n", ip)
}
}()
fmt.Println("continue~")
Add()
wg.Wait()
}
通常分析內存信息,需要使用go tool pprof http://localhost:6060/debug/pprof/heap,一般采樣多次進行比較,看內存的變化。而查看內存信息,主要用到pprof中的三個命令top、list 和traces, 如下所示:
step 1: 生成兩個內存分析文件,這兩個時間間隔取決于自己的需要,本例間隔差不多1分30秒。
step 2: 比較兩個內存文件中的區別。
$go tool pprof -base ~/pprof/pprof.alloc_objects.alloc_space.inuse_objects.inuse_space.001.pb.gz ~/pprof/pprof.alloc_objects.alloc_space.inuse_objects.inuse_space.002.pb.gz
-base:表示的是以第一個內存文件作為比較樣本。
step 3: 分析內存信息。
通過top、list和traces來查看內存信息。通過下面的執行結果,我們可以看出來,mian.Add函數使用的內存最多,而在Add中14行的buf = append(buf,make([]byte),2*1024*1024)是新增內存的來源。
對于traces來講,.........之間表示的是一個堆棧的調用關系。
備注:對于float、cum的介紹如下所示:
cum Sort entries based on cumulative weight
flat Sort entries based on own weight
對于CPU的使用分析要比內存簡單一些,畢竟CPU不需要分成幾塊進行比較,分析步驟如下:
step 1: 采集cpu數據信息。
命令:$ go tool pprof http://localhost:6060/debug/pprof/profile
step 2: 分析CPU信息。
通過top、list、traces來進一步進行分析CPU的熱點。
top和list 來查看cpu的使用時間:
traces分析:
看完上述內容,你們對Go語言的性能分析工具pprof怎么用有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。