go基础第七篇:利用pprof定位cpu和内存问题

在项目的main.go文件中引入

_ "net/http/pprof"

在main函数中加入:

go func() {
_ = http.ListenAndServe(":6060", nil)
}()

保证6060端口能访问到,如在容器中部署的话,别忘了添加端口映射。如果有防火墙的话,别忘了放开端口访问。

查看cpu使用情况:

go tool pprof -http :9090 http://${ip}:${port}/debug/pprof/profile

${ip}值是进程所在服务器的ip,${port}值是进程监听的端口,即上面配置的6060。

如上,如果使用了-http选项指定host和port的话,等待30s之后,会自动打开浏览器访问localhost:9090/ui/,这个是pprof的web ui。

点击右上角的超链接,我们可以看到取样时间是多少。我们可以通过耗时的分布,看出哪些函数占用cpu时间长。

点击view菜单的top菜单,会按照cpu使用时间降序排列。点击graph菜单,会展示图,这也是首次进入打开的页面。点击flame graph菜单,就会出所谓的火焰图。点击peek菜单,不仅可以展示按降序排列的cpu使用,还会看到调用栈。

 

查看内存使用情况:

go tool pprof -http :9090 http://${ip}:${port}/debug/pprof/heap

同样会自动打开浏览器访问localhost:9090/ui/,但不会等待30s,而是马上就跳转。

 

https://github.com/google/pprof/blob/main/doc/README.md

posted on 2020-07-29 14:45  koushr  阅读(605)  评论(0编辑  收藏  举报

导航