专栏首页程序员财富自由之路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 下载

gir 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 来查看图形化展示,可以再次确认问题确实出在这里:

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

公众号:程序员财富自由之路

博客:CSDN 王小明

关注我们,了解更多

关注后:回复 “idea” 或者 “内推”, 有惊喜

参考资料
  • 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

本文分享自微信公众号 - 程序员财富自由之路(gh_016ffe40d550),作者:猿星人

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-09-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

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

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

    王小明_HIT
  • CPU 占用过高问题排查

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

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

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

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

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

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

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

    子润先生
  • TiDB集群tikv节点内存占用较高问题排查

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

    SEian.G
  • apache占用过多内存问题

    很多web服务会选用Apache作为服务器软件。但对于物理内存不是很大的服务器来说,会有一个问题,就是Apache长时间运行,httpd进程会越来越大,占用过高...

    震八方紫面昆仑侠
  • 记一次 MongoDB 占用 CPU 过高问题的排查

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

    拓荒者
  • CPU占用过高排查

    最近一段时间 某台服务器上的一个应用总是隔一段时间就自己挂掉 用top看了看 从重新部署应用开始没有多长时间CPU占用上升得很快

    陈不成i
  • cpu占用过高排查

    2.查找进程733下的线程 可以看到TID 线程775占用了96%且持有了很长时间 其实到这一步基本上能猜测到应该是 肯定是那段代码发生了死循环

    常见_youmen
  • 记一次内存占用问题的调查过程

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

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

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

    程序员小王
  • Linux 内存使用过高排查

    Linux释放内存的命令: sync echo 1 > /proc/sys/vm/drop_caches

    用户5760343
  • 快速定位手游内存占用过高问题

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

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

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

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

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

    囚兔
  • Windbg分析高内存占用问题

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

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

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

    MikeLoveRust
  • java 一次CPU占用过高问题的排查及解决

    最近一段时间  某台服务器上的一个应用总是隔一段时间就自己挂掉      用top看了看  从重新部署应用开始没有多长时间CPU占用上升得很快  

    江湖前辈黄药师

扫码关注云+社区

领取腾讯云代金券