参考教程:
http://www.topgoer.com/函数/单元测试.html
https://blog.csdn.net/weixin_33906657/article/details/91699657
https://www.cnblogs.com/-lee/p/12689524.html
https://blog.csdn.net/u012855229/article/details/51930709/
https://cloud.tencent.com/developer/article/1469185
https://www.cnblogs.com/Dr-wei/p/11742414.html
https://segmentfault.com/a/1190000016412013
https://www.cnblogs.com/upyun/p/8526925.html
个人简单总结
go程序性能测试一般有两种方法:
- 编写test程序,使用go test命令行测试
- 在原程序中加入性能分析的代码,使用pprof进行分析
1、go test
测试函数:
类型 | 格式 | 作用 |
---|---|---|
测试函数 | 函数名前缀为Test | 测试程序的一些逻辑行为是否正确 |
基准函数 | 函数名前缀为Benchmark | 测试函数的性能 |
示例函数 | 函数名前缀为Example | 为文档提供示例文档 |
b.ResetTimer() 重置计时器
b.SetParallelism(1) 设置使用的CPU数
go test的一些实用参数:
- -v 查看测试函数名称和运行时间
- -run=“xx” 只有函数名匹配上xx的测试函数才会被go test命令执行,xx是正则表达式
- -list “xx” 只列出函数名匹配xx的测试函数
- -cover 查看测试覆盖率,在测试中至少被运行一次的代码占总代码的比例
- -coverprofile 用来将覆盖率相关的记录信息输出到一个文件,如=a.out
- -cpuprofile cpu.out 记录cpu使用情况,不可直接读,需要用到go tool pprof cpu.out
- -memprofile mem.out 记录内存使用情况
- -memprofilerate n 控制记录内存分配操作的行为,每当有n个字节的内存被分配时,分析器就会取样一次,默认512 * 1024=512K字节
- -bench 基准测试,-bench=正则表达式,-bench=.表示运行所有的基准测试
- -benchmem 获得内存分配的统计数据,即显示B/op和allocs/op
- -benchtime 基准时间,默认1s,-benchtime=20s
- -cpu num 来指定使用的CPU数量num
- -count 每个测试执行的次数,默认执行一次。
- -failfast 有测试函数失败,立马结束测试
- -parallel num 测试的最大并发数
- -timeout=ts 超时时间s/m/h
- -v 打印详细的测试日志
- net
性能说明:
allocs/op表示每次执行函数,内存分配次数
ns/op表示每次执行函数的耗时(多次执行的平均值)
B/op表示每次执行函数,内存分配的字节数
2、pprof
方法一
$ go get github.com/pkg/profile
main函数中加入defer profile.Start().Stop()或者defer profile.Start(profile.MemProfile).Stop()
$ go build xx.go
$ ./xx
./xx 的输出:
2020/10/28 20:29:50 profile: memory profiling enabled (rate 4096), /var/folders/sm/zk2pqw_55ps2n27_kt7zp2tr0000gn/T/profile215874309/mem.pprof
sum = 49999995000000
2020/10/28 20:29:50 profile: memory profiling disabled, /var/folders/sm/zk2pqw_55ps2n27_kt7zp2tr0000gn/T/profile215874309/mem.pprof
$ go tool pprof -pdf 生成的pprof文件的地址 > cpu.pdf
方法二
$ go test -bench=. -memprofile=mem.out -cpuprofile=cpu.out
$ go tool pprof cpu.out
$ go tool pprof mem.out
topn:查看CPU前n名的占用情况
参数说明:
- flat:当前函数占用CPU的耗时
- flat::当前函数占用CPU的耗时百分比
- sun%:函数占用CPU的耗时累计百分比
- cum:当前函数加上调用当前函数的函数占用CPU的总耗时
- cum%:当前函数加上调用当前函数的函数占用CPU的总耗时百分比
- 最后一列:函数名称
list 函数名:查看函数的执行情况
web:通过svg图的方式查看程序中详细的CPU占用情况
⚠️使用web前要先安装gvedit,官网https://graphviz.org/download/
MacOS直接使用命令行即可: brew install graphviz
此外还可以通过火焰图动态查看CPU占用情况。最上面的教程中已经介绍的比较详细了,此处不在赘述,可以直接阅读上述教程。