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,而是马上就跳转。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】