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

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

_ "net/http/pprof"

在main函数中加入:

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

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

如果使用的是gin框架,那么需要import "github.com/gin-contrib/pprof",在创建gin.Engine指针后,调用pprof.Register(engine, "/feed/debug/pprof")注册,然后再engine.Run(":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   koushr  阅读(661)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示