GOGC
GOGC 是 Golang 的垃圾回收控制变量。它的默认值是 100,即垃圾回收会在堆使用的 100% 时触发。我们可以通过修改其值来控制垃圾回收的频率。当我们的程序需要更大的堆时,我们可以将 GOGC 设置为更高的值。否则,将其设置为较低值可能会提高程序的性能。
示例代码:
package main
import "fmt"
import "runtime"
func main() {
fmt.Println("Before GOGC:", runtime.NumGC())
runtime.GC() // 主动触发垃圾回收
fmt.Println("After GOGC:", runtime.NumGC())
// 修改 GOGC 的值
oldGOGC := runtime.GOGC
runtime.GOGC = 200
fmt.Println("Before GOGC 200:", runtime.NumGC())
runtime.GC() // 主动触发垃圾回收
fmt.Println("After GOGC 200:", runtime.NumGC())
// 恢复原始 GOGC 的值
runtime.GOGC = oldGOGC
fmt.Println("After restore GOGC:", runtime.NumGC())
}
GODEBUG
GODEBUG 是一个用来管理 Golang 运行时的环境变量。它可以用来监测调试程序运行时的问题,例如卡死、死锁、垃圾回收等。GODEBUG 支持的选项有很多,可以通过设置不同的参数来获取不同的信息。下面是一些常用的 GODEBUG 选项:
- 可以使用 GODEBUG=gctrace=1 来打开垃圾回收的追踪功能。
- 可以使用 GODEBUG=schedtrace=1 来打开调度器的追踪功能。
- 可以使用 GODEBUG=gocacheverify=1 来打开缓存验证功能,用于调试缓存。
示例代码:
package main
import "fmt"
import "os"
func main() {
// 打开垃圾回收追踪
os.Setenv("GODEBUG", "gctrace=1")
fmt.Println("GODEBUG:", os.Getenv("GODEBUG"))
// 打开调度器追踪
os.Setenv("GODEBUG", "schedtrace=1")
fmt.Println("GODEBUG:", os.Getenv("GODEBUG"))
// 打开缓存验证功能
os.Setenv("GODEBUG", "gocacheverify=1")
fmt.Println("GODEBUG:", os.Getenv("GODEBUG"))
}
GOTRACEBACK
GOTRACEBACK 是 Golang 的运行时环境变量,用于控制错误时堆栈跟踪的级别。GOTRACEBACK 支持的选项有很多,可以通过设置不同的参数来获取不同的信息。下面是一些常用的 GOTRACEBACK 选项:
- 可以使用 GOTRACEBACK=crash 来在程序崩溃时获取完整的堆栈跟踪信息。
- 可以使用 GOTRACEBACK=all 来获取程序的完整堆栈跟踪。
- 可以使用 GOTRACEBACK=single 来获取最顶层的错误信息和调用栈。
示例代码:
package main
import "os"
func main() {
// 在程序崩溃时获取完整的堆栈跟踪信息
os.Setenv("GOTRACEBACK", "crash")
// 获取程序的完整堆栈跟踪
os.Setenv("GOTRACEBACK", "all")
// 获取最顶层的错误信息和调用栈
os.Setenv("GOTRACEBACK", "single")
}