基准测试需以Benchmark开头并使用*testing.B参数,通过b.N循环执行代码,重置计时器排除初始化开销,结合pprof分析性能瓶颈。

Go语言内置的
testing
基准函数命名必须以
Benchmark
*testing.B
b.N
func BenchmarkSum(b *testing.B) {
nums := make([]int, 1000)
for i := range nums {
nums[i] = i
}
b.ResetTimer() // 重置计时器,排除初始化开销
for i := 0; i < b.N; i++ {
sum := 0
for _, v := range nums {
sum += v
}
}
}建议:
b.ResetTimer()
运行
go test -bench=.
BenchmarkSum-8 1000000 1250 ns/op
1250 ns/op
附加选项可获取更多信息:
立即学习“go语言免费学习笔记(深入)”;
-benchmem
32 B/op 2 allocs/op
-count
-benchtime
重点关注内存分配次数和字节数,频繁的小对象分配可能触发GC,间接拖慢整体性能。
当发现某函数耗时异常,可用
pprof
runtime/pprof
pprof.StartCPUProfile
StopCPUProfile
go tool pprof
也可以结合
net/http/pprof
性能改进需有据可依,每项改动都应通过基准测试验证效果。
修改前后运行
benchcmp
benchstat
基本上就这些。写好benchmark不是一次性的任务,而是随着业务演进持续跟进的过程。配合CI流程定期跑性能测试,能有效防止退化。不复杂但容易忽略的是保持测试环境一致,否则数据不可比。
以上就是Golang性能测试与基准分析实践的详细内容,更多请关注php中文网其它相关文章!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号