第13章 3-性能分析

这章比较有意思,多扩展学一些

原文讲的没这么详细, 在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写得不够完善?后续有实际例子再回来更新

我来评几句
登录后评论

已发表评论数()

相关站点

热门文章