专栏首页程序员财富自由之路排查 Go 程序内存占用高问题
原创

排查 Go 程序内存占用高问题

下载测试代码

go get 中可以获取测试程序, 注意加上 -d 避免下载后自动安装。

Github

go get -d github.com/wolfogre/go-pprof-practice
cd $GOPATH/src/github.com/wolfogre/go-pprof-practice

如果 go get 下载不了, 可以 git clone 下载

git clone https://github.com/wolfogre/go-pprof-practice

对代码进行编译

然后运行

go mod init
go mod tidy

最后再运行

go build
./go-pprof-practice

运行 pprof 命令

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

在这里插入图片描述

还是三板斧top, list 等命令

list 命令

可以看到这次出问题的地方在 github.com/wolfogre/go-pprof-practice/animal/muridae/mouse.(*Mouse).Steal,函数内容如下:

func (m *Mouse) Steal() {
 log.Println(m.Name(), "steal")
 max := constant.Gi
 for len(m.buffer) * constant.Mi < max {
  m.buffer = append(m.buffer, [constant.Mi]byte{})
 }
}

可以看到,这里有个循环会一直向 m.buffer 里追加长度为 1 MiB 的数组,直到总容量到达 1 GiB 为止,且一直不释放这些内存,这就难怪会有这么高的内存占用了。 使用 web 来查看图形化展示,可以再次确认问题确实出在这里:

欢迎关注公众号:程序员财富自由之路

参考资料
  • https://blog.wolfogre.com/posts/go-ppof-practice/#%E6%8E%92%E6%9F%A5-cpu-%E5%8D%A0%E7%94%A8%E8%BF%87%E9%AB%98

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Go 排查内存占用过高问题

    可以看到这次出问题的地方在 github.com/wolfogre/go-pprof-practice/animal/muridae/mouse.(*Mouse...

    王小明_HIT
  • 如何排查Go 程序 CPU 占用过高问题

    如果要在 golang 开发过程中进行性能调优,一般需要使用 pprof,本文介绍的是 pprof 工具使用方法。

    王小明_HIT
  • TiDB集群tikv节点内存占用较高问题排查

    TiDB集群上线运行一段时间,近期巡检的时候发现一个问题,集群中TiKV节点内存占用比较高,尤其在导入数据的时候,节点的内存会更高

    SEian.G
  • Docker 容器内分析 java程序占用 cpu 高问题排查分析

    我们目前所有的 java 服务都是封装在 docker 里面的,今天做压力容量测试的时候发现有个服务占用cpu 300%,想找到是这个 java 程序的那个线程...

    张琳兮
  • CPU 占用过高问题排查

    2、找到该进程后,如何定位具体线程或代码呢,首先显示线程列表,并按照CPU占用高的线程排序:

    王小明_HIT
  • NodeJs 内存占用过高排查记录

    因为线上容器扩容引发的排查,虽然最后查出并不是真正的 OOM 引起的,但还是总结记录一下其中的排查过程,整个过程像是破案,一步步寻找蛛丝马迹,一步步验证出结果。

    子润先生
  • NodeJs 内存占用过高排查记录

    因为线上容器扩容引发的排查,虽然最后查出并不是真正的 OOM 引起的,但还是总结记录一下其中的排查过程,整个过程像是破案,一步步寻找蛛丝马迹,一步步验证出结果。

    子润先生
  • Windbg分析高内存占用问题

    最近产品发布大版本补丁更新,一商超客户升级后,反馈系统经常奔溃,导致超市的收银系统无法正常收银,现场排队付款的顾客更是抱怨声声。为了缓解现场的情况, 客户都是手...

    圣杰
  • 记一次内存占用问题的调查过程

    马哥linux运维 | 最专业的linux培训机构 ---- 最近在维护一台CentOS服务器的时候,发现内存无端"损失"了许多,free和ps统计的结果相差...

    小小科
  • 记一次内存占用问题的调查过程

    最近在维护一台CentOS服务器的时候,发现内存无端"损失"了许多,free和ps统计的结果相差十几个G,搞的我一度又以为遇到灵异事件了,后来Google了许久...

    程序员小王
  • ​高频面试题:Java程序占用 CPU 过高怎么排查

    这个问题可以说是 Java 面试的高频面试题了,有很多面试官都喜欢问这个问题,问题可能是下面这样的。

    捡田螺的小男孩
  • 查看程序占用tomcat内存情况

    最近,公司线上tomcat经常无缘无辜宕机,总结了一下定位问题的方法,仅供参考: 报错信息:

    奋飛
  • 线上应用故障排查之二:高内存占用

    前一篇介绍了线上应用故障排查之一:高CPU占用,这篇主要分析高内存占用故障的排查。

    爱撸猫的杰
  • 记一次 MongoDB 占用 CPU 过高问题的排查

    今天查看监控无意间突然发现自己的服务器上,CPU 占用率飙升到 100%,load 升到 10 以上,登录的响应已经达到半分钟

    拓荒者
  • 【Rust日报】2021-06-09 如何在生产环境排查 Rust 内存占用过高问题

    TensorBase 是第一个在真正的 RISC-V 芯片上运行的 SQL 数据库

    MikeLoveRust
  • 关于JVM CPU资源占用过高的问题排查

    一、背景:     先执行一个java程序里面开了两个线程分别都在while循环做打印操作。 # java -cp ./test-threads.jar...

    囚兔
  • 快速定位手游内存占用过高问题

    为了避免手机性能成为游戏选择时的壁垒,游戏厂商必须进行更好的游戏性能优化。本文利用WeTest平台的Cube工具,通过三步完成游戏内存检测与分析的过程,希望为游...

    WeTest质量开放平台团队
  • 解决oracle服务占用内存过高的问题

    通常我们在自己电脑上搭建项目环境时,都免不了要安装Oracle。不管你硬件多强悍,都会发现,Oracle服务一旦启用,内存立马吃紧。笔者内存8G,启动一个VS,...

    浩Coding
  • linux下java程序占用CPU和内存过高排错处理方案

    2:使用top -p pid 针对你所要查的pid查看这个进程的CPU和内存以及负载情况

    用户5166556

扫码关注云+社区

领取腾讯云代金券