这章比较有意思,多扩展学一些
原文讲的没这么详细, 在google找到了一篇相对比较全的文章
https://cizixs.com/2017/09/11/profiling-golang-program/
1、 离线应用程序搜集
原理: 引入runtime/pprof 包, 然后在程序运行期间调用写入数据
package main
import (
"fmt"
"os"
"runtime/pprof"
)
func main() {
f1, _ := os.Create("/Users/lijingle/Documents/test_cpu.prof")
f2, _ := os.Create("/Users/lijingle/Documents/test_men.prof")
pprof.StartCPUProfile(f1)
pprof.WriteHeapProfile(f2)
defer pprof.StopCPUProfile()
// defer f1.Close()
// defer f2.Close()
env := os.Environ()
procAttr := &os.ProcAttr{
Env: env,
Files: []*os.File{
os.Stdin,
os.Stdout,
os.Stderr,
},
}
pid, err := os.StartProcess("/bin/ls", []string{"ls", "-l"}, procAttr)
if err != nil {
fmt.Printf("Error %v starting process!", err)
os.Exit(1)
}
fmt.Printf("The process id is %v", pid)
}
得到test.prof之后,用go tool pprof test.prof
命令分析
todo 有实际的分析实例
2、火焰图
原文推荐用go-torch, 但看[go-torch文档](https://github.com/uber-archive/go-torch 说已经集成到pprof里了,good,试用了下,是个web界面,使用办法:
go tool pprof -http="8081" test test_cpu.prof
说明:
test是可执行程序,就是用go build test.go出来的产物
test_cpu.prof 就是程序里用pprof搜集到的数据
只能跑出web界面,但里面木有数据,应该是demo写得不够完善?后续有实际例子再回来更新
有疑问加站长微信联系(非本文作者)