go pprof项目中实践

最近由于项目中接口调用有挺多 延迟的,因此就借此机会学习下go 的pprof 分析下项目性能。

我们的go 程序不是http服务,是使用tars框架开发的rpc 服务。根据官方介绍,非http服务可以使用 runtime/pprof 包来记录性能profile。开始时候没搞懂跟 /net/http/pprof有啥区别。那就先尝试使用 runtime/pprof先,然后需要在main函数中添加如下代码

        f, err := os.Create("cpu_profile.pprof")
        if err != nil {
            log.Fatal("could not create CPU profile: ", err)
        }
        defer f.Close() 
        if err := pprof.StartCPUProfile(f); err != nil {
            log.Fatal("could not start CPU profile: ", err)
        }
        defer pprof.StopCPUProfile()

其实这里主要就是 StartCPUProfile 函数可以开启profile记录,查看过源码,里面会每隔100 毫秒进行一次写入,但是我在实际项目中并没有看到间隔写入,现在还没搞清楚到底为什么,而主要是通过  defer pprof.StopCPUProfile() 结束main的时候才一次性写入到指定的文件中。觉得很奇怪。写哪里先暂时放一放,拿到profile后 需要执行go tool pprof  xxx cpu_profile.pprof其中 xxx 时你的程序, cpu_profile.pprof 文件就是我们程序中写入的文件,这个可以拿到本地上查看性能。通过go tool 后就会进入到pprof 的交互界面,然后我们执行web  就可以生成 调用链相关的svg 文件,通过浏览器就可以查看了。查看时候可以看到其中的调用情况,这个svg图展示的其实就是函数的采样数据,通过里面的占比可以看出哪个函数占cpu时间最长,不要单看使用时间,要看占比,然后在刚才的pprof交互界面中输入 traces 打印下所有堆栈,就可以知道占比比较高的函数的调用站了。今天先记录这么多吧

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值