Golang的GC信息
来源:互联网 发布:热传导 数值模拟软件 编辑:程序博客网 时间:2024/06/03 16:14
本文转自:http://studygolang.com/articles/2701
一、GC信息的信息收集
设置环境变量GODEBUG=gctrace=1。
使用方法,如果程序为myserver。正常的启动方法为./myserver,如果需要收集GC信息启动方式如下GODEBUG=gctrace=1 ./myserver。
二、GC信息分析
gc5(6): 11+12+357+77 us, 0 -> 1 MB, 4294 (5261-967) objects, 67/2/0 sweeps, 6(115) handoff, 6(9) steal, 170/56/5 yields
gc5(6):表示第5次GC,共有6个线程参与GC。
11+12+357+77 us:表示停止各个goroutine花费时间是11us,释放标记对象所有时间为12us,扫描标记可回收对象花费时间为257us,完成各个线程结束为17us。GC总时间为457us。
0 -> 1 MB:表示上次GC后堆占用的空间为0MB,本次GC前堆占用的空间为1MB。
4294 (5261-967) objects:表示剩余未释放对象个数为4294个,GC之前拥有对象为5261个,本次GC释放对象967个。
基本规律是当前对象越多,扫描时间越长,需要释放的对象越多,释放过程越长。
三、GC需要注意的事情
因为golang中GC过程中需要把程序中所有goroutine全部停止,造成程序就像夯住一样,所以对于实时性要求比较高的程序要慎重使用golang语言。一个可以参考的建议,如果想要减少gc时间,就要减少对象数量,所以,如果可以尽量在代码中将对象进行复用。以减少临时对象数量,从而减少GC时间。
当然GC是可以关闭的,这样对于实时性要求高的程序可以推荐一种实现模式:
用一个主进程fock出两个子进程,两个子进程轮流提供服务,先让一个子进程提供服务,另一个子进程休眠。当提供服务的子进程工作一段时间后对象数量累计过多时,唤醒另一个子进程开始工作,本子进程开始GC,GC后进入休眠等待被唤醒。这样就避免掉了因为GC问题引起的不定时夯住的问题。
四、建议
对于实时性要求比较高的程序,一定要关注GC问题。因为golang的GC非常稚嫩,与java相比还差的很远,如果你不关心GC问题,很可能会引起项目的失败。也许将来golang的GC做的像java一样优秀,那上面所说的就没用了。
五、参考:
https://software.intel.com/en-us/blogs/2014/05/10/debugging-performance-issues-in-go-programs
- Golang的GC信息
- Golang的GC信息
- windows下 查看golang gc 信息!!
- golang的垃圾回收(GC)机制
- golang gc机制学习
- golang Garbage Collector(GC)
- Golang gc演进
- Golang源码探索(三) GC的实现原理
- Golang源码探索(三) GC的实现原理
- jstat查看jvm的GC信息
- Golang 在数据库Replication场景下的应用及GC算法
- tomcat查看GC信息
- tomcat查看GC信息
- tomcat查看GC信息
- tomcat查看GC信息
- tomcat查看GC信息
- golang 解析磁力链为 torrent 相关的信息
- 用SetStdHandle重定向golang的panic信息
- 求字符串的长度 的其他方法
- golang中container/heap包用法
- golang中archive/zip包用法
- golang中archive/tar包用法
- log4j三种输出方式
- Golang的GC信息
- wustoj 1319 球
- C语言位运算详解
- Android Studio implements 一个类后如何实现这个类的方法
- Go与C语言的互操作
- golang中net/http包用法
- 鼠标滚动加载图片及图片动画
- 算法训练 安慰奶牛 (克鲁斯卡尔)
- golang中net包用法(三)--TCP和UDP以及Unix domain socket