当前位置: 首页 > article >正文

go oom堆内存分析

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

执行top命令

分析

go tool pprof 的输出结果来看,我们可以分析内存占用的热点和可能的内存问题。以下是分析结果:


输出解读

  • flat:表示当前函数直接分配的内存大小(不包括它调用的其他函数的内存)。
  • flat%flat 占总内存分配的百分比。
  • cum:当前函数及其调用链的总内存分配。
  • cum%cum 占总内存分配的百分比。

前 10 个内存热点如下:

函数名直接内存 (flat)总内存 (cum)flat%cum%
runtime.malg146.56 MB146.56 MB56.93%56.93%
fmt.init.func166.01 MB66.01 MB25.64%25.64%
internal/poll.runtime_Semacquire24.50 MB24.50 MB9.52%9.52%
golang.org/x/net/webdav.(*memFile).Write7.89 MB7.89 MB3.06%3.06%
time.Sleep4 MB4 MB1.55%1.55%
runtime.allgadd2.84 MB2.84 MB1.10%1.10%
gindemo/pkg/controller/student.Oom.func11.50 MB97.02 MB0.58%37.69%
fmt.Fprintln0 MB91.52 MB0%35.55%
fmt.Println (inline)0 MB91.52 MB0%35.55%
fmt.newPrinter0 MB66.01 MB0%25.64%

问题分析

  1. runtime.malg

    • runtime.malg 是 Go runtime 为 Goroutine 分配栈内存的函数。
    • 占用了 146.56MB (56.93%) 的内存,这说明程序可能创建了大量 Goroutine,每个 Goroutine 默认分配 2KB 的栈空间。
    • 问题可能原因
      • Goroutine 使用不当,比如进入死循环或 Goroutine 泄漏。
      • 某些操作频繁创建 Goroutine,而没有释放。
  2. fmt.init.func1

    • fmt.init.func1 占用了 66.01MB (25.64%) 的内存,这通常和 fmt 包的初始化有关。
    • 问题可能原因
      • 程序中过度使用 fmt.Printlnfmt.Sprintf 等方法,导致分配了大量字符串。
      • 注意调用链中有 fmt.Printlnfmt.Fprintln,两者累积占用了 91.52MB (35.55%) 的内存。
  3. internal/poll.runtime_Semacquire

    • 占用了 24.50MB (9.52%) 的内存,这通常和系统 I/O 操作或锁竞争有关。
    • 问题可能原因
      • 某些操作在等待资源(如文件、网络连接或锁),未能释放。
      • 检查程序是否有阻塞的 I/O 或锁使用问题。
  4. golang.org/x/net/webdav.(*memFile).Write

    • 占用了 7.89MB (3.06%) 的内存,这说明 WebDAV 的 Write 操作分配了一些临时内存。
    • 问题可能原因
      • 如果 Write 被频繁调用,可能导致内存分配累积。
      • 检查 WebDAV 文件操作是否可以优化。
  5. gindemo/pkg/controller/student.Oom.func1

    • 该函数总共占用了 97.02MB (37.69%) 的内存(cum%)。
    • 问题可能原因
      • 函数中可能存在大量内存分配,或频繁调用其他内存热点函数(如 fmt.Println)。
      • 需要进一步定位 student.Oom.func1 的具体实现逻辑。


http://www.kler.cn/a/500064.html

相关文章:

  • minimum edit distance
  • 一分钟学会文心一言API如何接入,文心一言API接入教程
  • TypeError: Cannot create a consistent method resolution order (MRO) for
  • 论文导读 | 可串行化事务机制
  • LayaAir3.2来了:性能大幅提升、一键发布安装包、支持WebGPU、3D导航寻路、升级为真正的全平台引擎
  • web网页设 web网页设计,html页面制作,div布局 css js
  • 安全运维管理 10.2资产管理
  • Kubernetes 服务发现与负载均衡
  • Kotlin | Android Provider 的实现案例
  • PHP获取局域网ip(192.168)
  • 第三十六章 C++ 多线程
  • 第5天:APP应用微信小程序原生态开发H5+Vue技术封装打包反编译抓包点
  • 转运机器人在物流仓储行业的优势特点
  • 大数据智能选课系统
  • day07_Spark SQL
  • 【技术支持】安卓无线adb调试连接方式
  • RepPoints: Point Set Representation for Object Detection—用于目标检测的点集表示
  • Python的秘密基地--[章节11] Python 性能优化与多线程编程
  • 简单说一下 类
  • 地下苹果(马铃薯)怎么破局?
  • 前端使用Get传递数组形式的数据
  • 机器学习笔记合集
  • Webpack 入门指南