网站用的服务器多少钱,单页网站 seo,国外wordpress移动主题,怎么做找优惠券的网站前言
在做Go的性能分析调研的时候也使用到了一些压测方面的工具#xff0c;go本身也给我们提供了BenchMark性能测试用例#xff0c;可以很好的去测试我们的单个程序性能#xff0c;比如测试某个函数#xff0c;另外还有第三方包go-wrk也可以帮助我们做http接口的性能压测go本身也给我们提供了BenchMark性能测试用例可以很好的去测试我们的单个程序性能比如测试某个函数另外还有第三方包go-wrk也可以帮助我们做http接口的性能压测今天就来介绍下这两种工具的使用。 BenchMark
BenchMark是Go的单测包testing里提供的一个压测工具类可以帮助我们测试某个代码片段或者函数的性能包括耗时、内存占用和内存分配的情况。 使用方法
在单元测试文件中写一个性能的单测函数函数名必须以Benchmark开头
下面写一个测试json序列化的性能测试用例
func BenchmarkEncodingJsonMarshal(b *testing.B) {for i : 0; i b.N; i { //固定写法N表示随机执行多少次多次执行可以保证测试结果的可靠性json.Marshal(agentAggregatedDetections) //要测试的程序片段}
}
执行结果如下 有的时候我们测试某个函数只希望测试某个代码片段可能就认为这里需要验证一下这种也可以在单测里面标识下面这个代码执行情况和上面一样
func BenchmarkEncodingJsonMarshal(b *testing.B) {//与性能无关的代码b.ResetTimer()for i : 0; i b.N; i {json.Marshal(agentAggregatedDetections)}b.StopTimer()//与性能无关的代码
}
上面这种方法是在编辑器里面执行的我们也可以在命令行里面执行对应的test类并且可以带上一些参数观察更多的信息这个也是比较常用的方式
执行命令
go test -benchBenchmarkEncodingJsonMarshal //如果要执行所有的测试类下面的Benchmark函数bench.辅助参数
-benchtime
前面的命令中我们并没有指定测试时长因此使用的是默认值1秒现在咱们来修改这个参数试试毕竟1秒内完成基准测试并不是普遍适用的指定基准测试时长为10秒go test -benchBenchmarkEncodingJsonMarshal -benchtime10s除了指定测试时长还可以通过benchtime指定执行次数这个次数就是我们在for循环里写的b.N这个数字标识执行多少次循环指定程序执行1000次-benchtime1000x
-count count是用来控制函数的执行次数默认是1次这个和benchtime里面的次数不同count是控制Benchmarkxxx函数的执行次数benchtime是控制函数里面for循环的执行次数go test -benchBenchmarkEncodingJsonMarshal -count2 -benchtime1000x
-benchmem benchmem参数可以用来查看程序在执行的时候内存使用和内存次数分配的情况go test -benchBenchmarkEncodingJsonMarshal -benchtime1000x -benchmem go-wrk
go版本的wrk工具用来压测http接口go-wrk本身也是一个第三方的go项目项目地址GitHub - adjust/go-wrk: a small heavy duty http/https benchmark tool written in go
安装go-wrk
1、下载项目到本地git clone https://github.com/adjust/go-wrk.git
2、执行go mod init go-wrk初始化module
3、go build生成go-wrk可执行文件
使用go-wrk
压测一个go服务的http接口go-wrk -c400 -t8 -n10000 -mGET http://10.106.19.12:8080/performance/pertest 命令行中的参数说明
-HUser-Agent: go-wrk 0.1 bechmark\nContent-Type: text/html;: 由\n分隔的请求头
-c100: 使用的最大连接数
-ktrue: 是否禁用keep-alives
-ifalse: if TLS security checks are disabled
-mGET: HTTP请求方法
-n1000: 请求总数
-t1: 使用的线程数
-b HTTP请求体
-s 如果指定它将计算响应中包含搜索到的字符串s的频率
输出结果参数说明
Avg time per request请求的平均响应时间
Requests per second每秒钟处理的请求数量QPS
99th percentile time接口请求耗时99线
Slowest time for request耗时最长的请求时间