pprof是golang自带的性能分析工具,在程序运行过程中,可以记录程序的运行信息,像CPU使用情况、内存使用情况、协程的情况等等。
pprof主要有两种使用方式:
- 通过文件方式输出Profile
- 通过http方式输出Profile
通过文件方式输出profile
下面给出一个简单的示例程序(例子摘自网上):
package main
import (
"log"
"math/rand"
"os"
"runtime/pprof"
"time"
)
const (
row = 1000
col = 1000
)
func fillMatrix(m *[row][col]int) {
s := rand.New(rand.NewSource(time.Now().UnixNano()))
for i := 0; i < row; i++ {
for j := 0; j < col; j++ {
m[i][j] = s.Intn(100000)
}
}
}
func main() {
//创建输出文件
f, err := os.Create("cpu.prof")
if err != nil {
log.Fatal("could not create CPU profile: ", err)
}
//获取系统信息
if err := pprof.StartCPUProfile(f); err != nil {
log.Fatal("could not start cpu profile: ", err)
}
defer pprof.StopCPUProfile()
//待分析代码
x := [row][col]int{
}
fillMatrix(&x)
f1, err := os.Create("mem.prof")
if err != nil {
log.Fatal("could not create memory profile: ", err)
}
//获取堆内存占用情况
if err := pprof.WriteHeapProfile(f1