【pprof】【golang】【性能分析】Go程序性能优化全攻略:从零开始掌握pprof

从 0 到 1 手把手入门 pprof 工具

pprof 是 Go 内置的性能剖析工具,用于收集和分析程序的性能数据,包括 CPU 使用、内存分配、阻塞操作等。它可以帮助开发者定位性能瓶颈、内存泄漏和 Goroutine 问题。


1:启用 pprof

1.1 导入 pprof

要使用 pprof,需要在代码中引入 net/http/pprof 包:

import (
    _ "net/http/pprof" // 导入后会自动注册 pprof 相关的路由
    "net/http"
    "log"
)
1.2 启动一个监听端口来访问 pprof
func main() {
    go func() {
        log.Println(http.ListenAndServe("localhost:6060", nil))
    }()

    // 你的主程序逻辑
    for {
        // 模拟高 CPU 占用任务
    }
}

此时,pprof 的默认路由会在 localhost:6060 提供数据访问。


2:访问 pprof 界面

启动程序后,可以访问以下路由:

  • 基本信息http://localhost:6060/debug/pprof/
    在这里插入图片描述

  • CPU Profilinghttp://localhost:6060/debug/pprof/profile?seconds=30(收集 30 秒的 CPU 性能数据)
    运行后可以下载到对应的cpu性能数据

  • 内存 Profilinghttp://localhost:6060/debug/pprof/heap
    运行后可以下载到对应的内存性能数据

  • Goroutineshttp://localhost:6060/debug/pprof/goroutine
    可以下载对应的Goroutines相关数据

  • 线程http://localhost:6060/debug/pprof/threadcreate
    可以下载对应的线程相关数据

3:生成和分析性能数据

3.1 使用命令行生成 CPU Profile:

在程序运行时,执行以下命令收集性能数据:

go tool pprof profile

profile 文件为步骤2中通过http://localhost:6060/debug/pprof/profile?seconds=30下载得到的文件
在这里插入图片描述

3.2 交互式分析:

执行命令后,会进入 pprof 的交互式命令行:

(pprof) top

常用命令:

  • top:显示占用资源最多的函数。
  • list <函数名>:查看具体函数的详细调用情况。
  • web:生成可视化图表(需要安装 Graphviz)。
  • svg:生成 SVG 格式图表。

4:分析内存使用情况

可以使用内存快照来排查内存泄漏或高内存使用问题:

go tool pprof http://localhost:6060/debug/pprof/heap
查看内存分配情况:

pprof 命令行中输入:

(pprof) top
(pprof) list <函数名>

5:使用本地文件分析 pprof 数据

可以将 pprof 数据保存为文件,稍后分析:

curl -o cpu.prof http://localhost:6060/debug/pprof/profile?seconds=30
go tool pprof cpu.prof

6:生成火焰图

安装 pprof 的火焰图工具:

go install github.com/google/pprof@latest

然后使用以下命令生成火焰图:

go tool pprof -http=:8080 cpu.prof
上一篇:常见Linux命令(详解)


下一篇:el-select的搜索功能