今天就跟大家聊聊有關(guān)Go語言的性能分析工具pprof怎么用,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
公司主營業(yè)務(wù):網(wǎng)站設(shè)計、網(wǎng)站制作、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。成都創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊有機(jī)會用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)推出資源免費做網(wǎng)站回饋大家。
pprof:是Go的性能分析工具,在程序運行過程中,可以記錄程序的運行信息,可以是CPU使用情況、內(nèi)存使用情況、goroutine運行情況等,Go語言已經(jīng)將pprof 封裝在包net/http/pprof中。
對于pprof來說主要用于:CPU分析、內(nèi)存分析、阻塞分析、互斥鎖分析。
查看這些指標(biāo)有兩種方式,一種是瀏覽器方式,一種是命令行方式。
瀏覽器方式:
通過 http://pprofIPAddress:port/debug/pprof/ 來訪問,訪問之后的界面如下所示:
命令行方式:
基本命令:
# 下載cpu profile,默認(rèn)從當(dāng)前開始收集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分析和內(nèi)存分析兩部分的使用方法。
這里的內(nèi)存指的是Go中的堆數(shù)據(jù),例子如下所示:
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,監(jiān)聽請求
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()
}
通常分析內(nèi)存信息,需要使用go tool pprof http://localhost:6060/debug/pprof/heap,一般采樣多次進(jìn)行比較,看內(nèi)存的變化。而查看內(nèi)存信息,主要用到pprof中的三個命令top、list 和traces, 如下所示:
step 1: 生成兩個內(nèi)存分析文件,這兩個時間間隔取決于自己的需要,本例間隔差不多1分30秒。
step 2: 比較兩個內(nèi)存文件中的區(qū)別。
$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:表示的是以第一個內(nèi)存文件作為比較樣本。
step 3: 分析內(nèi)存信息。
通過top、list和traces來查看內(nèi)存信息。通過下面的執(zhí)行結(jié)果,我們可以看出來,mian.Add函數(shù)使用的內(nèi)存最多,而在Add中14行的buf = append(buf,make([]byte),2*1024*1024)是新增內(nèi)存的來源。
對于traces來講,.........之間表示的是一個堆棧的調(diào)用關(guān)系。
備注:對于float、cum的介紹如下所示:
cum Sort entries based on cumulative weight
flat Sort entries based on own weight
對于CPU的使用分析要比內(nèi)存簡單一些,畢竟CPU不需要分成幾塊進(jìn)行比較,分析步驟如下:
step 1: 采集cpu數(shù)據(jù)信息。
命令:$ go tool pprof http://localhost:6060/debug/pprof/profile
step 2: 分析CPU信息。
通過top、list、traces來進(jìn)一步進(jìn)行分析CPU的熱點。
top和list 來查看cpu的使用時間:
traces分析:
看完上述內(nèi)容,你們對Go語言的性能分析工具pprof怎么用有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。