第13章 3-性能分析

yezide · · 584 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

这章比较有意思,多扩展学一些
原文讲的没这么详细, 在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写得不够完善?后续有实际例子再回来更新


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:yezide

查看原文:第13章 3-性能分析

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

584 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传