【Golang】go程序性能测试教程+总结

参考教程:

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占用情况。最上面的教程中已经介绍的比较详细了,此处不在赘述,可以直接阅读上述教程。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值