简说 pprof
pprof 是一个可视化和分析数据的工具。该工具可读取分析样本并生成可视化报告,从而帮助程序分析。
1. 使用场景
- 查找分析程序中的错误,如内存泄漏,race 冲突,协程泄漏
- 程序优化,分析程序性能瓶颈
2. 如何使用
- 方式一:
使用 net/http/pprof
监听相应的端口,并通过浏览器打开查看
package main
import (
"fmt"
"net/http"
_ "net/http/pprof"
)
func main(){
http.HandleFunc("/",)
if err := http.ListenAndServe(":7080",nil);err != nil {
fmt.Printf("http.ListenAndServe failed, err:%+v",err)
}
}
查看内存使用情况:
http://localhost:7080/debug/pprof/heap
查看协程堆栈信息:
http://localhost:7080/debug/pprof/goroutine
查看 30s 内 CPU 使用情况:
http://localhost:7080/debug/pprof/profile?seconds=30
- 方式二:
使用 runtime/pprof
库,在适当的位置调用并最终生成文件
package main
import(
"os"
"fmt"
"runtime/pprof"
)
func main() {
// 记录 CPU 使用
cpuf,err := os.Create("./cpuprofile")
if err != nil {
fmt.Printf("create cpu profile failed, err: %+v", err)
return
}
defer cpuf.Close()
pprof.StartCPUProfile(cpuf)
defer pprof.StopCPUProfile()
// 记录