golang 性能分析(pprof)

编程入门 行业动态 更新时间:2024-10-08 01:27:30

golang <a href=https://www.elefans.com/category/jswz/34/1771266.html style=性能分析(pprof)"/>

golang 性能分析(pprof)

采样方式

net/http/pprof

  • 适用于程序长期运行的线上服务
    • 底层也是调用的 runtime/pprof 提供的函数,封装成接口对外提供网络访问
  • 如果是使用了HTTP包的路由,则只需要import _ "net/http/pprof"即可
    • 此时会自动把相关路由路径注册到了默认的http.DefaultServeMux
package pproffunc init() {http.HandleFunc("/debug/pprof/", Index)http.HandleFunc("/debug/pprof/cmdline", Cmdline)http.HandleFunc("/debug/pprof/profile", Profile)http.HandleFunc("/debug/pprof/symbol", Symbol)http.HandleFunc("/debug/pprof/trace", Trace)
}
  • 如果使用了第三方server(例如gin),则需要手动注册路由
    • gin还可以直接使用github/DeanThompson/ginpprof包,只需要ginpprof.Wrap(router)即可
package mainimport ("github/gin-gonic/gin""github/DeanThompson/ginpprof"
)func main() {router := gin.Default()// automatically add routers for net/http/pprof// e.g. /debug/pprof, /debug/pprof/heap, etc.ginpprof.Wrap(router)// ginpprof also plays well with *gin.RouterGroup// group := router.Group("/debug/pprof")// ginpprof.WrapGroup(group)
}

benchmark pprof

  • 命令行

    • 生成分析文件: go test -bench <bench_func> -run none -cpuprofile <cpu.prof>
      • 除了-cpuprofile, 还有-benchmem -memprofile-blockprofile等指标
  • Goland

runtime/pprof

  • 适用于程序只运行一次就停的,例如每天只跑一次的离线预处理程序
  • 运行程序后生成cpu.profmem.prof两个文件
import "runtime/pprof"func main() {f, _ 

更多推荐

golang 性能分析(pprof)

本文发布于:2024-03-14 15:51:15,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1736809.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:性能   golang   pprof

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!