总述

在性能分析方面, golang提供了 pprof 工具, 帮助定位 内存、cpu、goroutine 的问题. pprof提供的功能在 runtime/pprof 的包中, 也提供了 http的接口, 参考 net/http/pprof

经常使用:

  1. 总入口 http://$host:$port/debug/pprof
  2. 查看goroutine信息: http://$host:$port/debug/pprof/goroutine?debug=1
  3. 查看内存使用 go tool pprof -inuse_space http://$host:$port/debug/pprof/heap go tool pprof web http://10.110.160.41:9314/debug/pprof/heap
  4. 查看cpu使用 go tool pprof http://$host:$port/debug/pprof/profile

除此之外, 还可以用 ?seconds=60 放在url后面, 表示采样的时间间隔

其中, 2 和 3 都是在 交互式命令行中, 可以使用一下命令:

  • top N: 查看排名前N个的函数
  • web: 进入web页面进行控制

pprof 还可以使用ui: go tool pprof -http :9090 http://$host:$port/debug/pprof/heap 指定代码路径, 可以查看相关代码: go tool pprof -call_tree -source_path ~/go/pkg/mod http://localhost:9301/debug/pprof/profile 指定采样间隔 go tool pprof –seconds 25 http://localhost:9090/debug/pprof/profile cpu采样中, 常用的命令: top -cum top 20 -cum list funcname: 显示函数信息 web: 浏览器观察

pprof很好用, 但是也存在缺点: 不是很直观, 调用关系一般都比较深, 可以使用火焰图.

go-torch -u http://$host:$port -t 30

运行命令后会生成一个 svg 图片, 然后点击打开就可以了

常见的detection:

  • goroutine 跑飞了
  • heap跑飞了
  • cpu利用率过高

参考

  1. runtime/pprof
  2. google官方文档
  3. google官方工具
  4. profiling官方文档
  5. gperftool工具
  6. 官方pprof示例使用blog
  7. frame graph