使用 pprof 进行 golang 程序内存分析


本文摘自网络,作者,侵删。

前言

在使用 golang 编写复杂的项目时,往往会有用到多协程并发的场景,这时候容易因为疏忽,产生协程泄漏的问题,进而产生类似于内存泄漏的后果。 本文主要针对协程泄漏问题的排查,提供 golang 程序内存可视化分析的思路和做法。

pprof 简介

pprof 是用于可视化和分析配置文件数据的工具。
pprof 读取 profile.proto 格式的概要分析样本的集合,并生成报告以可视化并帮助分析数据。它可以生成文本和图形报告(通过使用 dot 可视化包)。

pprof 使用方法

埋点

首先,我们需要在 golang 程序内埋点,引入 pprof 的监测代码,并通过 http 接口暴露出来。

import _ "net/http/pprof"func main() {	go func() {
		_ = http.ListenAndServe("0.0.0.0:8081", nil)
    }()// your code}复制代码

然后我们启动需要分析的程序,就可以准备分析它了。

如何查看各个模块申请内存的大小

通过分析各个模块和函数占用的内存的大小,可以极为有效地排查内存泄漏。

命令行方式生成可视化分析图像

go tool pprof -alloc_space -cum http://localhost:8081/debug/pprof/heap复制代码

命令运行后,在控制台输入 web ,按下回车,会用.svg 默认的查看软件打开一个 svg 图片,展示了各个模块的内存占用图。
如果输入 web 运行后报错 Failed to execute dot. Is Graphviz installed? Error: exec: "dot": executable file not found in %PATH%,是因为电脑没有安装 Graphviz,这是图像生成依赖的组件。
解决方法是:打开 graphviz.gitlab.io/download/ 按照提示下载安装即可。安装完成后,对于 Windows,要在设置环境变量 path 后面加上 Graphviz 安装路径的 bin 文件夹。

web 方式浏览器查看具体数据列表

http://localhost:8081/debug/pprof/heap?debug=1复制代码

如何查看各个模块创建的协程数量

通过分析各个模块和函数创建的协程的数量,可以极为有效地排查协程泄漏,如果存在协程泄漏,对应的模块的协程数量是惊人的。

命令行方式生成可视化分析图像

go tool pprof http://localhost:8081/debug/pprof/goroutine复制代码

命令运行后,在控制台输入 web ,按下回车。

web 方式浏览器查看具体数据列表

http://localhost:8081/debug/pprof/goroutine?debug=1复制代码

总结

以上就是 pprof 的简单使用方法的介绍,相信对排查 golang 的内存泄漏和协程泄漏问题会有所帮助。如果需要更多更详细的用法,请参考 pprof 相关官方文档。


本文来自:51CTO博客

感谢作者:mb6004f88aa04b6

查看原文:使用 pprof 进行 golang 程序内存分析

相关阅读 >>

聊聊dubbo-Go-proxy的plugins

聊聊dubbo-Go-proxy的parammapper

Golang数组与切片的不同之处

手撸Golang 行为型设计模式 访问者模式

Golang 无缓存channel和有缓存channel

Golang组件化网络服务器框架halia指南

Golang中小数点后三位的四舍五入

Golang elasticsearch7的使用

Golang中协程图文详解

21 Golang中的接口(一)

更多相关阅读请进入《Go》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...