Golang性能分析pprof

代码接入

go 复制代码
package main

import (
	_ "net/http/pprof"
)

func main() {
	go func() {
		http.ListenAndServe("0.0.0.0:6060", nil)
	}()
}

采集方式

1. CPU profiling:必须加 seconds,采样10秒

bash 复制代码
# 看耗时、调用链、慢函数
curl -o cpu.pprof "http://127.0.0.1:6060/debug/pprof/profile?seconds=10"

2. 内存(堆):直接快照,不用seconds

bash 复制代码
# 看哪个函数分配内存最多:内存泄漏、堆内存占用
curl -o mem.pprof "http://127.0.0.1:6060/debug/pprof/heap"

3. 协程阻塞:直接快照,不用seconds

bash 复制代码
# 看协程阻塞在哪里:等待锁、等待 channel、等待 IO
curl -o block.pprof "http://127.0.0.1:6060/debug/pprof/block"

4. 锁竞争:直接快照,不用seconds

bash 复制代码
# 看锁竞争: 互斥锁冲突严重的函数
curl -o mutex.pprof "http://127.0.0.1:6060/debug/pprof/mutex"

5. trace: 必须加 seconds,采样10秒

bash 复制代码
curl -o trace.out "http://172.16.39.91:6060/debug/pprof/trace?seconds=10"

交互命令

  1. 进入命令:
bash 复制代码
go tool pprof xxx.pprof
  1. 看概览
bash 复制代码
top
top10
top20
....
  1. 看函数详情 + 调用链
bash 复制代码
list 函数名
  1. 网页可视化
bash 复制代码
web
weblist 函数名
  1. 看调用关系图
bash 复制代码
tree
  1. 退出
bash 复制代码
exit
  1. 例外trace
    trace 不能用 go tool pprof, 必修用:
bash 复制代码
go tool trace trace.out
# 或
go tool trace -http=:6061 trace.out

采集脚本

bash 复制代码
#!/bin/bash
host="127.0.0.1:6060"
seconds=10

echo "开始并行采集所有 pprof,预计等待 $seconds 秒..."

# 后台并行采集
curl -o cpu.pprof "http://$host/debug/pprof/profile?seconds=$seconds" &
curl -o trace.out "http://$host/debug/pprof/trace?seconds=$seconds" &

# 瞬间采集
curl -o mem.pprof "http://$host/debug/pprof/heap"
curl -o block.pprof "http://$host/debug/pprof/block"
curl -o mutex.pprof "http://$host/debug/pprof/mutex"

# 等待后台 CPU & trace 完成
wait

echo -e "所有 5 项 pprof 采集完成!仅用时 $seconds 秒"
相关推荐
hasty13 小时前
限制写了却没生效:OpenTelemetry Go 的 Unicode 截断边界
开发语言·后端·golang
EatFan18 小时前
Go语言全栈实战:基于 Gin + Vue + JWT + RBAC 从零搭建前后端分离权限管理系统
vue.js·golang·go·vue·gin·jwt·rbac
ZealSinger19 小时前
Go slog生产落地LevelVar与共存
开发语言·后端·golang·go
丹宇码农19 小时前
Go 与 Python 协程(Coroutine)对比演示项目
开发语言·python·golang
ttwuai19 小时前
Go开源后台管理系统推荐:3个官方仓库怎么按技术栈和适用边界比较?
开发语言·golang·开源
茉莉玫瑰花茶21 小时前
GO [ 并发 · 调度器 ]
开发语言·后端·golang
恋喵大鲤鱼21 小时前
go list command
golang·list
茉莉玫瑰花茶1 天前
GO [ 方法 ]
开发语言·后端·golang
茉莉玫瑰花茶2 天前
GO [ 函数 ]
开发语言·后端·golang
茉莉玫瑰花茶2 天前
GO [ 类型 ]
开发语言·数据库·golang