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

本文介绍了如何使用Go语言的pprof工具进行内存分析,特别是针对golang程序的内存占用问题。通过添加pprof库,可以访问http://ip:8899/debug/pprof/查看内存概况。使用`go tool pprof`结合`-inuse_space`选项能更直观地分析内存使用情况。通过`top`和`tree`命令找出内存占用高的函数调用链。重点关注flat和cum指标,理解它们在内存分析中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引言

日常项目,有时会出现oom的情况,这时候我们光依靠code review进行问题定位是很困难的。这里我们需要一个排查工具,来定位是哪里的代码导致内存溢出的,这个工具就是pprof

前提

如果是非http(s)服务类的,需要在代码中嵌入如下几行代码
import _ "net/http/pprof"

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

如果是http(s)类的的服务,可以添加上所使用的pprof第三方库,如gin

import "github.com/gin-contrib/pprof"

//StartHttp 新建HTTP服务
func StartHttp() error {
   
	router := gin.New()
	...
	pprof.Register(router)
	
	addr := fmt.Sprintf(":%d", 8899)
	if err := router.Run(addr); err != nil {
   
		return err
	}
	return nil
}

使用

在浏览器中输入http://ip:8899/debug/pprof/可以看到一个汇总页面
在这里插入图片描述
其中heap项是我们需要关注的信息,可以点进去看下,但信息比较分散,没啥大用
在这里插入图片描述
更有用的信息我们需要借助go tool pprof来进行分析

go tool pprof -alloc_space/-inuse_space http://ip:8899/debug/pprof/heap
# 注意 -alloc_space 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值