Golang 使用pprof分析性能

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

参考
Golang 使用pprof分析goweb的性能问题

go的pprof可以用来对服务的性能进行检测,其中net/http/pprof包用来检测web服务器的相关的性能的分析,包括goroutine的数量,heap的大小问题。

一、简单使用
package main
import (
    "fmt"
    "log"
    "net/http"
    _ "net/http/pprof"
    "time"
)

func main() {
    // 开启pprof
    go func() {
        log.Println(http.ListenAndServe("localhost:6060", nil))
    }()
    go hello()
    select {}
}
func hello() {
    for {
        go func() {
            fmt.Println("hello word")
        }()
        time.Sleep(time.Millisecond * 1)
    }
}

如上所示,实现了一个简单函数,在for循环内部不停的创建go 并调用IO输出hello word。 在主函数的内部通过http.ListenAndServe(“localhost:6060”, nil) 监听6060端口,等待用户查看相关的性能信息。一定要注意包含_ “net/http/pprof”这个包。。 以上代码就实现了一个pprof监控性能的代码,我们只需要在浏览器中执行http://localhost:6060/debug/pprof/就会得到相对应的程序的信息。

image.png

由此可见,我们这个程序此时正有六个go协程正在运行。

1.在cmd中使用web命令
这里要先安装Graphviz,具体参考Graphviz安装及使用

C:\Users\lenovo>go tool pprof http://localhost:6060/debug/pprof/profile
Fetching profile over HTTP from http://localhost:6060/debug/pprof/profile
Saved profile in C:\Users\lenovo\pprof\pprof.samples.cpu.003.pb.gz
Type: cpu
Time: Apr 2, 2019 at 5:19pm (CST)
Duration: 30s, Total samples = 520ms ( 1.73%)
Entering interactive mode (type "help" for commands, "o" for options)
(pprof) web

浏览器会自动打开这个svg文件,也可以手动打开file:///C:/Users/lenovo/AppData/Local/Temp/pprof002.svg

2.上面使用web生成了svg文件,也可以使用callgrind生成out文件

(pprof) callgrind
Generating report in profile001.callgraph.out

这个文件在C:\Users\lenovo里找到了,安装Windows版的qcachegrind,然后使用qcachegrind.exe打开这个out文件。使用qcachegrind可以在各个函数之间自由跳转,查看函数内部的CPU占用情况,相对其他格式要更加灵活方便。

image.png


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

本文来自:简书

感谢作者:懒皮

查看原文:Golang 使用pprof分析性能

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

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