1.安装

下载Graphviz
地址 http://www.graphviz.org/downl...

我本地下载好windows版本后,需要加入到环境变量中

安装pprof

go get github.com/pkg/profile

加入到环境变量中
image.png

2.代码样例

package main

import (
    "github.com/pkg/profile"
    "log"
    "time"
)
func joinSlice() []string {
        var arr []string
    for i := 0; i < 100000; i++ {
        arr = append(arr, "arr")
    }
    return arr
}

func main() {
    // 开始性能分析, 返回一个停止接口
    stopper := profile.Start(profile.CPUProfile, profile.ProfilePath("."))
    // 在main()结束时停止性能分析
    defer stopper.Stop()
    // 分析的核心逻辑
    joinSlice()
    // 让程序至少运行1秒
    time.Sleep(time.Second)
    log.Println("finished")
}
//go build -o cpu cpu.go
//go tool pprof --pdf cpu.exe cpu.pprof > cpu.pdf

优化后的

func joinSlice() []string {
        arr := make([]string,100000)
    for i := 0; i < 100000; i++ {
        arr = append(arr, "arr")
    }
    return arr
}

按照顺序执行

go build  //生成可执行文件

.\golangdemo.ext  //执行生成cpu.pprof文件

 go tool pprof --pdf golagndemo.ext cpu.pprof > cpu.pdf   

3.结果

两次生成的结果

第一次可以看到joinSlice占用了50%的cpu时间,另外50%是垃圾回收
image.png

优化后就没有了
image.png

参考 http://c.biancheng.net/view/1...


你若安好便是晴天
82 声望10 粉丝