GODEBUG
是 golang中一个控制runtime调度变量的变量,其值为一个用逗号隔开的 name=val对列表,常见有以下几个命名变量。
allocfreetrace
设置allocfreetrace = 1
会导致对每个分配进行概要分析,并在每个对象的分配上打印堆栈跟踪并释放它们。
clobberfree
设置 clobberfree=1
会使垃圾回收器在释放对象的时候,对象里的内存内容可能是错误的。
cgocheck
cgo相关。
设置 cgocheck=0
将禁用当包使用cgo非法传递给go指针到非go代码的检查。如果值为1(默认值)会启用检测,但可能会丢失有一些错误。如果设置为2的话,则不会丢失错误。但会使程序变慢。
efence
设置 efence=1
会使回收器运行在一个模式。每个对象都在一个唯一的页和地址,且永远也不会被回收。
gccheckmark
GC相关。
设置 gccheckmark=1
启用验证垃圾回收器的并发标记,通过在STW时第二个标记阶段来实现,如果在第二阶段的时候,找到一个可达对象,但未找到并发标记,则GC会发生Panic。
gcpacertrace
GC相关。
设置 gcpacertrace=1
可使gc打印关于并发 pacer 内部状态的信息
gcshrinkstackoff
GC相关。
设置 gcshrinkstackoff=1可
禁止goroutine移动到小stack。这种模式下,goroutine stack只能增长。简单来说就是一个关闭收缩的开关。
gcstoptheworld
GC 相关。
设置 gcstoptheworld=1
可禁止并发垃圾回收,使每个gc就是一个事件。设置 gcstoptheworld=2
会在垃圾回收后进行并发扫描。
gctrace
GC 相关。
设置 gctrade=1
会使垃圾回收器在每次GC打印单行标准错误,汇总收集的内存量和暂停的时间。格式可能会更换。
如果输出行以(forced
)结尾,则说明此GC是通过调用 runtime.GC 来触发的。这个调试变量非常常见。如 GODEBUG=gotrace=1 go run main.go
输出字段意义:
gc # @#s #%: #+#+# ms clock, #+#/#/#+# ms cpu, #->#-># MB, # MB goal, # P
where the fields are as follows:
gc # the GC number, incremented at each GC
@#s time in seconds since program start
#% percentage of time spent in GC since program start
#+...+# wall-clock/CPU times for the phases of the GC
#->#-># MB heap size at GC start, at GC end, and live heap
# MB goal goal heap size
# P number of processors used
The phases are stop-the-world (STW) sweep termination, concurrent
mark and scan, and STW mark termination. The CPU times
for mark/scan are broken down in to assist time (GC performed in
line with allocation), background GC time, and idle GC time.
If the line ends with "(forced)", this GC was forced by a
runtime.GC() call.
➜ gotest GODEBUG=gctrace=1 go run main.go
gc 1 @0.115s 0%: 0.067+0.92+0.003 ms clock, 0.26+0.41/0.78/0.011+0.015 ms cpu, 4->4->0 MB, 5 MB goal, 4 P
gc 2 @0.194s 0%: 0.056+1.5+0.003 ms clock, 0.22+1.3/0.27/1.6+0.012 ms cpu, 4->4->0 MB, 5 MB goal, 4 P
gc 3 @0.303s 0%: 0.24+1.5+0.004 ms clock, 0.98+0.20/0.32/1.5+0.016 ms cpu, 4->4->0 MB, 5 MB goal, 4 P
gc 4 @0.344s 0%: 0.12+0.45+0.003 ms clock, 0.51+0/0.41/0.81+0.012 ms cpu, 4->4->0 MB, 5 MB goal, 4 P
字段解释