golang gctrace分析gc过程
时间:2022-07-25
本文章向大家介绍golang gctrace分析gc过程,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
golang/gc
三色标记法
(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。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux 命令查找指定文件夹下符合查询条件的文件和文件夹实例演示
- 用Python实现一个最新QQ办公版(TIM)的登录界面
- Oracle 数据库直接执行本地sql文件、sql脚本实例演示
- Oracle 数据库利用回收站恢复删除的表实例演示
- Linux 命令利用scp实现从服务器共享地址上传下载文件、文件夹实例演示,scp命令的参数详解
- Oracle 数据库利用sql语句判断某个表是否是临时表实例演示,达梦数据库查询出所有临时表
- JavaScript 技术篇-一段js代码展示可以随鼠标移动变换样式的卡通人物,动态女生眼睛跟着鼠转动
- PyQt5 图形界面-用Qt Designer来设计UI界面,并转化为python代码运行
- Python 技术篇-python生成html源码功能实现演示,html代码自动生成技巧。列表生成式的灵活应用。
- Python 技术篇-pyHook键盘鼠标监听事件,监测鼠标键盘按键。超简单,几行代码搞定。
- Python 技术篇-用mutagen库提取MP3歌曲图片
- Python 典藏篇-Microsoft Visual C++ 14.0 is required,官方vc++运行库工具一键式解决!
- Python 技术篇-邮件写入html代码,邮件发送表格,邮件发送超链接,邮件发送网络图片
- 面经手册 · 第11篇《StringBuilder 比 String 快?空嘴白牙的,证据呢!》
- domReady的理解