乐趣区

关于golang:go-pprof-性能分析

1. 装置

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

我本地下载好 windows 版本后,须要退出到环境变量中

装置 pprof

go get github.com/pkg/profile

退出到环境变量中

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% 是垃圾回收

优化后就没有了

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

退出移动版