性能分析工具 pprof | 青训营笔记

64 阅读1分钟

性能分析工具 pprof

  • 背景:想知道什么地方耗费多少cpu、内存等资源
  • pprof:用于可视化和分析性能以及分析数据的工具

功能介绍

搭建之前给github的pprof实践项目:github.com/wolfogre/go…

  • 查看Makefile,执行相应的命令,然后运行可执行文件也行,运行go run main.go也可以

  • 浏览器查看指标:

    localhost:6060/debug/pprof

    • 指标:allocs block heap mutex profile

排查实战

终端输入

go tool pprof "<http://localhost:6060/debug/pprof/profile?seconds=10>"

image.png

  • cpu

    • 命令:topN 查看占用资源最多的函数

      • 参数说明:

image.png

  • 对于flat和cum参数

image.png

  • 命令:list

    • 根据指定的正则表达式查找代码行(可看到函数中循环占很多大多时间)
  • 命令:web

    • 调用关系可视化(可生成图)
    • 这一步可能会出graphviz的问题,请参考www.h5tpl.com/blog/372,下方的在网页端查看火焰图等图时产生的问题也是这个问题。
  • Heap-堆内存

    • go tool pprof -http=:8080 "<http://localhost:6060/debug/pprof/heap>"

      在8080端口看到可视化内存占用图

    • top、source视图

    • sample中有四种采样说明:

      • alloc_objects:程序累计申请的对象数
      • alloc_space:程序累计申请的内存大小
      • inuse_objects:程序当前持有的对象数
      • inuse_space:程序当前占用的内存大小
  • goroutine-协程

    • 在heap指令改后缀,从heap->goroutine

    • 可视化

      • 由上到下表示调用顺序
      • 每一块代表一个函数,越长代表越占cpu
      • 动态火焰图,能够点击分析
    • 有搜索功能

  • mutex-锁

    • 同样改后缀mutex
    • 找阻塞block,解决相应问题
    • 展示阻塞block并不会全部展示,占比小的函数忽略,便于开发者找到关键阻塞