当前位置:首页 > 文章列表 > Golang > Go问答 > 堆大小变化和活动堆数在 gctrace=1 中的含义

堆大小变化和活动堆数在 gctrace=1 中的含义

来源:stackoverflow 2024-03-04 12:03:27 0浏览 收藏

积累知识,胜过积蓄金银!毕竟在Golang开发的过程中,会遇到各种各样的问题,往往都是一些细节知识点还没有掌握好而导致的,因此基础知识点的积累是很重要的。下面本文《堆大小变化和活动堆数在 gctrace=1 中的含义》,就带大家讲解一下知识点,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~

问题内容

设置 godebug=gctrace=1 会导致 go 垃圾收集器向有关每个 gc 轮的内部信息的标准错误发出一行。假设我有这个输出:

gc 1 @0.021s 0%: 0.15+0.37+0.25 ms clock, 3.0+0.19/0.39/0.60+5.0 ms cpu, 4->4->0 mb, 5 mb goal, 48 p
gc 2 @0.024s 0%: 0.097+0.94+0.16 ms clock, 0.29+0.21/1.3/0+0.49 ms cpu, 4->4->1 mb, 5 mb goal, 48 p
gc 3 @0.027s 1%: 0.10+0.43+0.17 ms clock, 0.60+0.48/1.5/0+1.0 ms cpu, 4->4->0 mb, 5 mb goal, 48 p
gc 4 @0.028s 1%: 0.18+0.41+0.28 ms clock, 0.18+0.69/2.0/0+0.28 ms cpu, 4->4->0 mb, 5 mb goal, 48 p
gc 5 @0.031s 1%: 0.078+0.35+0.29 ms clock, 1.1+0.26/2.0/0+4.4 ms cpu, 4->4->0 mb, 5 mb goal, 48 p
gc 6 @0.032s 1%: 0.11+0.50+0.32 ms clock, 0.22+0.99/2.3/0+0.64 ms cpu, 4->4->0 mb, 5 mb goal, 48 p
gc 7 @0.034s 1%: 0.18+0.39+0.27 ms clock, 0.18+0.56/2.2/0+0.27 ms cpu, 4->4->0 mb, 5 mb goal, 48 p
gc 8 @0.035s 2%: 0.12+0.40+0.27 ms clock, 0.12+0.63/2.2/0+0.27 ms cpu, 4->4->0 mb, 5 mb goal, 48 p
gc 9 @0.036s 2%: 0.13+0.41+0.26 ms clock, 0.13+0.52/2.2/0+0.26 ms cpu, 4->4->0 mb, 5 mb goal, 48 p
gc 10 @0.038s 2%: 0.099+0.51+0.20 ms clock, 0.19+0.56/1.9/0+0.40 ms cpu, 4->5->0 mb, 5 mb goal, 48 p
gc 11 @0.039s 2%: 0.10+0.46+0.20 ms clock, 0.10+0.23/1.3/0.005+0.20 ms cpu, 4->4->0 mb, 5 mb goal, 48 p
gc 12 @0.040s 2%: 0.066+0.46+0.24 ms clock, 0.93+0.40/1.7/0+3.4 ms cpu, 4->4->0 mb, 5 mb goal, 48 p
gc 13 @0.041s 2%: 0.099+0.30+0.20 ms clock, 0.099+0.60/1.7/0+0.20 ms cpu, 4->4->0 mb, 5 mb goal, 48 p
gc 14 @0.042s 2%: 0.095+0.45+0.24 ms clock, 0.38+0.58/2.0/0+0.98 ms cpu, 4->5->0 mb, 5 mb goal, 48 p
gc 15 @0.044s 2%: 0.095+0.45+0.21 ms clock, 1.0+0.78/1.9/0+2.3 ms cpu, 4->4->0 mb, 5 mb goal, 48 p
gc 16 @0.045s 3%: 0.10+0.45+0.23 ms clock, 0.10+0.70/2.1/0+0.23 ms cpu, 4->5->0 mb, 5 mb goal, 48 p
gc 17 @0.046s 3%: 0.088+0.40+0.17 ms clock, 0.088+0.45/1.9/0+0.17 ms cpu, 4->4->0 mb, 5 mb goal, 48 p
.
.
.
.
gc 6789 @9.998s 12%: 0.17+0.91+0.24 ms clock, 0.85+1.8/5.0/0+1.2 ms cpu, 4->6->1 mb, 6 mb goal, 48 p
gc 6790 @10.000s 12%: 0.086+0.55+0.24 ms clock, 0.78+0.30/4.2/0.043+2.2 ms cpu, 4->5->1 mb, 6 mb goal, 48 p

文档中有这些值的定义:

gc # @#s #%: #+#+# ms clock#+#/#/#+# ms cpu, #->#-># MB, # MB goal, #P 

where the fields are as follows:
gc #       the GC number, incremented at each GC
@#s        time in seconds since program start
#%         percentage of time spent in GC since program start
#+...+#    wall-clock/CPU times for the phases of the GC
#->#->#    MB heap size at GC start, at GC end, and live heap
# MB goal  goal heap size
# P        number of processors used

我真正困惑的是 #->#-># mb gc 开始时的堆大小、gc 结束时的堆大小以及实时堆 >。

  • 每轮 gc 都会向操作系统释放一些未使用的(垃圾)内存,并且这必须减少堆大小,这是正确的吗?如果是,那么为什么堆的某些值正在增加?例如:4->5->0。 在 gc 开始之前,我们有 4mb 内存,包括垃圾。那么,我们清理掉其中的垃圾后,怎么可能获得5mb内存呢?

  • 第三个值是实时堆大小。常规堆大小有什么区别?我认为它是没有垃圾的堆。

  • 目标堆大小是如何计算的? gc 在清理后想要达到的堆大小是否正确?那为什么这个值大于gc开始前的堆大小呢?


解决方案


GC 每次都会清除一些垃圾。它不一定将其释放给操作系统(如果它认为只需很快再次请求它);如果确实如此,操作系统不一定会回收它(直到存在来自另一个进程的内存压力,操作系统可能会将该内存分配给您的进程,以防它再次需要)。

活动堆大小是指正在使用的堆的大小,减去任何死对象和可供将来分配的可用堆空间。目标堆大小是 GC 认为需要从操作系统获取多少内存来持续处理进程的分配,而不必不断地从操作系统请求更多内存(即,有多少内存保持活动状态 + 在 GC 之间分配和丢弃了多少内存)运行)。

GC 的目标是清理堆中的死对象,并且维护足够的可用堆空间来处理大多数分配,而不必向操作系统请求更多内存(这很慢),同时也不保留过多的可用内存(以便操作系统仍然可以分配给其他进程)。

终于介绍完啦!小伙伴们,这篇关于《堆大小变化和活动堆数在 gctrace=1 中的含义》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

版本声明
本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
解决PHP商城登录界面验证码显示问题的方法解决PHP商城登录界面验证码显示问题的方法
上一篇
解决PHP商城登录界面验证码显示问题的方法
Cookie jar中无法检索到cookie
下一篇
Cookie jar中无法检索到cookie
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    542次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    511次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    498次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    484次学习
查看更多
AI推荐
  • AI边界平台:智能对话、写作、画图,一站式解决方案
    边界AI平台
    探索AI边界平台,领先的智能AI对话、写作与画图生成工具。高效便捷,满足多样化需求。立即体验!
    419次使用
  • 讯飞AI大学堂免费AI认证证书:大模型工程师认证,提升您的职场竞争力
    免费AI认证证书
    科大讯飞AI大学堂推出免费大模型工程师认证,助力您掌握AI技能,提升职场竞争力。体系化学习,实战项目,权威认证,助您成为企业级大模型应用人才。
    426次使用
  • 茅茅虫AIGC检测:精准识别AI生成内容,保障学术诚信
    茅茅虫AIGC检测
    茅茅虫AIGC检测,湖南茅茅虫科技有限公司倾力打造,运用NLP技术精准识别AI生成文本,提供论文、专著等学术文本的AIGC检测服务。支持多种格式,生成可视化报告,保障您的学术诚信和内容质量。
    561次使用
  • 赛林匹克平台:科技赛事聚合,赋能AI、算力、量子计算创新
    赛林匹克平台(Challympics)
    探索赛林匹克平台Challympics,一个聚焦人工智能、算力算法、量子计算等前沿技术的赛事聚合平台。连接产学研用,助力科技创新与产业升级。
    664次使用
  • SEO  笔格AIPPT:AI智能PPT制作,免费生成,高效演示
    笔格AIPPT
    SEO 笔格AIPPT是135编辑器推出的AI智能PPT制作平台,依托DeepSeek大模型,实现智能大纲生成、一键PPT生成、AI文字优化、图像生成等功能。免费试用,提升PPT制作效率,适用于商务演示、教育培训等多种场景。
    570次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码