golang 降低GC c触发频率
降低GC 频率
- main 申请一大块内存 造成 heap 很大的假象
- 由于虚拟内存的技术的存在只有使用时候才会CPU汇编指令才会交换为物理内存
- 由于程序存在期间不释放内存,也不使用 gc 判断的时候会被误导,因此不会触发GC
- 可以使用 debug.SetGCPercent(xxx)/GOGC 调整百分比
调整GC
- ballast[1]: 压舱石技术 twitch.tv工程师实现
- 虚拟内存让你GC很难达达阀值
- GOGC tuner[2]: 通过自动调整GOGC
- uber工程师提供的一项技术 但是没有开源
系统触发gc
- 调用 runtime.GC
- runtime.mallocgc
- runtime.sysmon 定时调用
runtime.sysmon
- 检查死锁
- 强占调度
- GC
- 运行 timer
GC 变更
- go 1.13 固定64个bucket 执行异步任务
- go 1.14 使用 runtime.sysmon 将 timer放在p上 减少了上下文切换锁竞争
- 遍历所有的p的timer 知道找到一个timer
- 如果超过10ms 进行下一轮 poll 网络
- 如果timer到期直接启动新的M 处理 timer
本文来自博客园,作者:vx_guanchaoguo0,转载请注明原文链接:https://www.cnblogs.com/guanchaoguo/p/16466474.html