前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >golang gctrace分析gc过程

golang gctrace分析gc过程

作者头像
ppxai
发布2020-09-23 17:49:52
2.2K0
发布2020-09-23 17:49:52
举报
文章被收录于专栏:皮皮星球皮皮星球

golang/gc

三色标记法

图片原图:https://en.wikipedia.org/wiki/Tracing_garbage_collection#/media/File:Animation_of_tri-color_garbage_collection.gif

(1)、有黑白灰三个集合。初始时所有对象都是白色。

(2)、从Root对象开始标记(协程栈, 全局对象等), 将所有可达对象标记为灰色。

(3)、从灰色对象集合取出对象, 将其引用的对象标记为灰色, 放入灰色集合, 并将自己标记为黑色。

(4)、重复第三步, 直到灰色集合为空, 即所有可达对象都被标记。

(5)、标记结束后, 不可达的白色对象即为垃圾。对内存进行迭代清扫, 回收白色对象。

(6)、重置GC状态。

使用gctrace分析gc的实际情况

Golang,自带gc,在不改动代码的情况下,我们可以设置GODEBUG='gctrace=1'环境变量启动程序,来向标准错误输出打印,查看gc 是否有异常:

GODEBUG=gctrace=1 go test .  -run=^$ -bench=BenchmarkLeak -benchtime 20s -test.memprofile=mem.profile -benchmem
gc 66 @2.988s 3%: 0.076+9.7+0.015 ms clock, 1.2+38/37/0.11+0.24 ms cpu, 313->321->160 MB, 323 MB goal, 16 P
gc 67 @3.047s 3%: 0.054+9.8+0.067 ms clock, 0.87+4.0/37/33+1.0 ms cpu, 310->319->162 MB, 321 MB goal, 16 P
gc 68 @3.110s 3%: 0.12+8.9+0.041 ms clock, 2.0+6.3/33/36+0.66 ms cpu, 315->322->160 MB, 325 MB goal, 16 P
gc 69 @3.173s 3%: 0.061+8.9+0.033 ms clock, 0.97+46/35/0+0.53 ms cpu, 313->320->161 MB, 321 MB goal, 16 P
gc 70 @3.232s 3%: 0.065+9.4+0.004 ms clock, 1.0+10/36/36+0.078 ms cpu, 311->321->163 MB, 322 MB goal, 16 P
gc 71 @3.294s 3%: 0.10+9.8+0.030 ms clock, 1.7+18/38/27+0.49 ms cpu, 317->325->164 MB, 327 MB goal, 16 P
gc 42: 表示第42次GC,共有16个P (线程)参与GC。

@3.294s: @后面的数字表示程序启动经历的时间.

3%: 表示gc 占时间比。

0.10+9.8+0.030 ms: STW(stop-the-world)0.11ms, 并发标记和扫描的时间9.8ms, STW标记的时间0.030ms。

1.7+18/38/27+0.49 ms cpu, 表示垃圾回收占用cpu时间

317->325->164 MB: 表示堆的大小,gc后堆的大小,存活堆的大小

327 MB goal 表示整体堆的大小为327M。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020年09月15日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • golang/gc
    • 三色标记法
    • 使用gctrace分析gc的实际情况
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档