设置gctrace的变量值为1即可,这个既可以设置成环境变量,也可以选择按如下方式执行: ~~~ GODEBUG=gctrace=1 go run main.go //GODEBUG=gctrace=1 ./main ~~~ GODEBUG=gctrace=1 代表只针对这个进程开启gc追踪功能。程序输出如下: ~~~ gc 1 @0.121s 0%: 0.62+0.52+0.069 ms clock, 1.2+0/0.50/1.2+0.13 ms cpu, 4->4->0 MB, 5 MB goal, 4 P gc 2 @0.164s 0%: 0.011+2.6+0.060 ms clock, 0.046+0.59/0.37/0.66+0.24 ms cpu, 4->4->0 MB, 5 MB goal, 4 P # command-line-arguments gc 1 @0.008s 0%: 0.12+10+0.050 ms clock, 0.25+0.73/3.7/5.7+0.10 ms cpu, 4->4->3 MB, 5 MB goal, 4 P # command-line-arguments gc 1 @0.001s 0%: 0.020+3.3+0.064 ms clock, 0.060+1.6/2.7/3.9+0.19 ms cpu, 4->4->4 MB, 5 MB goal, 4 P gc 2 @0.016s 0%: 0.59+6.8+0.044 ms clock, 2.3+0.095/4.9/1.3+0.17 ms cpu, 7->8->7 MB, 9 MB goal, 4 P gc 3 @0.045s 0%: 0.014+5.2+0.039 ms clock, 0.058+2.3/5.1/5.1+0.15 ms cpu, 13->13->12 MB, 15 MB goal, 4 P gc 4 @0.097s 0%: 0.017+22+0.093 ms clock, 0.071+3.1/21/0.50+0.37 ms cpu, 22->24->22 MB, 24 MB goal, 4 P ~~~ 对于每一行每一列的具体含义: ~~~ 1 表示第一次执行 @0.038s 表示程序执行的总时间 1% 垃圾回收时间占用总的运行时间百分比 0.018+1.3+0.076 ms clock 垃圾回收的时间,分别为STW(stop-the-world)清扫的时间, 并发标记和扫描的时间,STW标记的时间 0.054+0.35/1.0/3.0+0.23 ms cpu 垃圾回收占用cpu时间 4->4->3 MB 堆的大小,gc后堆的大小,存活堆的大小 5 MB goal 整体堆的大小 4 P 使用的处理器数量 ~~~ 打开了GCTRACE之后对于gc执行的时间点、执行次数以及耗时可能已经有了初步的了解,但是对什么地方耗用大量内存并造成大量延迟可能并不清楚。