欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > Go oom分析(二)——导出dump离线分析

Go oom分析(二)——导出dump离线分析

2025/1/14 18:39:51 来源:https://blog.csdn.net/LONG_Yi_1994/article/details/145077952  浏览:    关键词:Go oom分析(二)——导出dump离线分析

在 Go 程序中导出内存或 CPU 的 dump 文件(通常通过 pprof 工具生成)并进行分析,以下是详细步骤:

1. 在程序中开启 pprof

在你的 Go 程序中引入 net/http/pprof,开启 pprof 服务:

import (_ "net/http/pprof""log""net/http"
)func init() {go func() {log.Println(http.ListenAndServe("localhost:6060", nil))}()
}

这样会在 localhost:6060 开启一个 HTTP 服务器,提供调试接口。

2. 导出 Dump 文件

通过访问 pprof 提供的接口,可以导出 CPU、堆内存、Goroutines 等的 dump 文件。

(1)CPU Profile

捕获一段时间的 CPU 使用数据:

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

默认采样时间是 30 秒,可调整 seconds 参数。

2)Heap (内存分配)

导出当前堆内存分配情况:

curl http://localhost:6060/debug/pprof/heap -o heap.prof

3)Goroutines

导出当前所有 Goroutines 的状态:

curl http://localhost:6060/debug/pprof/goroutine -o goroutine.prof

(4)其他

  • Block(阻塞分析)

curl http://localhost:6060/debug/pprof/block -o block.prof

注意:需要在程序中开启阻塞分析:

import "runtime"
func init() {runtime.SetBlockProfileRate(1)
}

Mutex(锁分析)

curl http://localhost:6060/debug/pprof/mutex -o mutex.prof

注意:需要开启锁分析:

import "runtime"
func init() {runtime.SetMutexProfileFraction(1)
}

3. 分析 Dump 文件

导出的 .prof 文件可以用以下工具分析:

(1)使用 go tool pprof

运行以下命令:

go tool pprof <binary> <dump_file>

例如:

go tool pprof ./your_app cpu.prof

在交互界面中,常用命令:

  • top:显示占用资源最多的函数。
  • list <function>:查看某个函数的详细实现。
  • web:生成调用图(需要 Graphviz 支持)。

如果是远程服务:

go tool pprof http://localhost:6060/debug/pprof/heap

(2)使用火焰图

.prof 转为火焰图形式,更直观:

  • 安装 FlameGraph 工具。
  • 导出火焰图:
go tool pprof -svg <binary> <dump_file> > profile.svg
  • 打开生成的 profile.svg 进行查看。

4. 在线分析工具

你也可以将 dump 文件上传到在线分析工具(如 pprof.me)中进行图形化展示。

5. 浏览器分析

go tool pprof -http=0.0.0.0:8080 ./your_app heap.prof

5. 示例操作

假设运行一个 Go 应用:

./your_app

程序运行中出现内存占用异常,通过以下步骤排查:

  • 导出当前堆内存:
curl http://localhost:6060/debug/pprof/heap -o heap.prof
  • 分析 dump 文件:
go tool pprof ./your_app heap.prof
  1. 在交互界面中查看:
    • top:检查内存占用最大的函数。
    • web:生成调用图。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com