pprof简单使用
1. 什么是 pprof?
pprof
是 Go 语言内置的性能分析工具。它能够帮助开发者收集 CPU、内存、goroutine 等资源的使用情况,生成性能报告并提供可视化功能。pprof
提供了全面的性能分析能力,是排查性能瓶颈、优化代码的利器。
2. pprof 使用场景
- CPU 分析:查看哪些函数消耗了大量的 CPU 时间。
- 内存分析:检查哪些对象占用了大量内存,分析内存分配频率。
- Goroutine 分析:查看 Goroutines 的状态及堆栈信息,排查死锁等并发问题。
- 阻塞分析:跟踪 goroutines 被阻塞的位置,帮助找出锁竞争和其他阻塞行为。
3. 如何在 Go 中启用 pprof?
在 Go 应用中启用 pprof
只需简单引入内置的 net/http/pprof
包,并启动 HTTP 服务。以下是一个最小的例子:
package main
import (
"log"
"net/http"
_ "net/http/pprof" // 引入 pprof 包
)
func main() {
go func() {
log.Println(http.ListenAndServe("localhost:6060", nil)) // 开启 pprof 监听
}()
// 模拟一个 CPU 密集型任务
for i := 0; i < 10000000; i++ {
}
}
此代码将在 localhost:6060 启动一个 HTTP 服务器,可以通过浏览器访问不同的 pprof 分析页面。
4. pprof 常用的 HTTP 路径
访问 localhost:6060 时,有几个常用路径可以用来生成不同的分析报告:
- /debug/pprof/: 提供所有的分析报告入口,包括 CPU、内存、goroutine 等。
- /debug/pprof/profile: 生成 CPU 性能报告,默认为 30 秒的采样。
- /debug/pprof/heap: 生成内存分配的报告,帮助了解内存使用情况。
- /debug/pprof/goroutine: 查看所有 Goroutines 的当前状态和堆栈信息。
- /debug/pprof/block: 查看 goroutines 阻塞情况。
- /debug/pprof/trace?seconds=5: 获取程序执行的 trace 日志。
5. 使用 go tool pprof 命令
在代码运行的同时,可以使用 go tool pprof 命令分析生成的报告。以 CPU 性能分析为例:
go tool pprof http://localhost:6060/debug/pprof/profile
执行以上命令会下载 CPU 性能报告,并进入交互式命令行。常用命令包括:
- top: 显示消耗 CPU 时间最多的函数列表。
- list [函数名]: 显示指定函数的源码及其耗时。
- web: 生成图形化的性能分析报告(需要 Graphviz 支持)。
内存分析示例 为了分析内存,访问以下地址:
go tool pprof http://localhost:6060/debug/pprof/heap
top 和 list 的命令查看内存分配最多的地方。
(pprof) top
(pprof) list main
6. 可视化分析
执行
go tool pprof -http=:8081 cpu.pprof
浏览器访问 http://localhost:8081,查看完整的可视化性能分析结果。
其他
性能调优 https://developer.aliyun.com/article/1174056