Go压测工具

前言

在做Go的性能分析调研的时候也使用到了一些压测方面的工具,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 -bench=BenchmarkEncodingJsonMarshal   //如果要执行所有的测试类下面的Benchmark函数:bench=.

辅助参数

-benchtime
  • 前面的命令中我们并没有指定测试时长,因此使用的是默认值1秒,现在咱们来修改这个参数试试,毕竟1秒内完成基准测试并不是普遍适用的
  • 指定基准测试时长为10秒:go test -bench=BenchmarkEncodingJsonMarshal -benchtime=10s
  • 除了指定测试时长,还可以通过benchtime指定执行次数,这个次数就是我们在for循环里写的b.N这个数字,标识执行多少次循环,指定程序执行1000次:-benchtime=1000x
-count
  • count是用来控制函数的执行次数,默认是1次,这个和benchtime里面的次数不同,count是控制Benchmarkxxx函数的执行次数,benchtime是控制函数里面for循环的执行次数
    go test -bench=BenchmarkEncodingJsonMarshal -count=2 -benchtime=1000x

-benchmem
  • benchmem参数可以用来查看程序在执行的时候内存使用和内存次数分配的情况
    go test -bench=BenchmarkEncodingJsonMarshal  -benchtime=1000x -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 -c=400 -t=8 -n=10000 -m=GET "http://10.106.19.12:8080/performance/pertest"

命令行中的参数说明:

-H="User-Agent: go-wrk 0.1 bechmark\nContent-Type: text/html;": 由'\n'分隔的请求头
-c=100: 使用的最大连接数
-k=true: 是否禁用keep-alives
-i=false: if TLS security checks are disabled
-m="GET": HTTP请求方法
-n=1000: 请求总数
-t=1: 使用的线程数
-b="" HTTP请求体
-s="" 如果指定,它将计算响应中包含搜索到的字符串s的频率

输出结果参数说明:

Avg time per request:请求的平均响应时间
Requests per second:每秒钟处理的请求数量(QPS)
99th percentile time:接口请求耗时99线
Slowest time for request:耗时最长的请求时间

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/263072.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构】——二叉树功能

前言&#xff1a;我们前面已经了解了二叉树的一些概念&#xff0c;那么我们今天就来了解下二叉树的遍历实现和一些性质。 二叉树的遍历方式有三种&#xff1a;前序&#xff0c;中序&#xff0c;后序。 前序&#xff1a;先根节点&#xff0c;再左子树&#xff0c;最后右子树。 中…

计算机硬件知识小结

计算机组成概览 计算机硬件的五大单元 在介绍计算机硬件基础之前&#xff0c;我们必须了解一下计算机硬件的五大单元(注意这里说的是硬件的五大单元并不是计算机五大单元): 输入设备:无论是计算机五大单元还是计算机硬件的五大单元&#xff0c;这其中必须包含的东西肯定是输入…

Unity中后处理 脚本 和 Shader

文章目录 前言一、我们先创建一个默认的后处理Shader&#xff0c;用于脚本测试二、在脚本中使用Graphics.Blit();1、我们先公开一个材质&#xff0c;用于测试后处理效果2、因为在实际开发中&#xff0c;我们不可能为每一个后处理Shader创建对应的材质球。所以&#xff0c;需要对…

C语言实战演练之跳动的爱心C语言版

跳 动 的 爱 心 - LOVE - 完整程序 #include <stdio.h> #include <math.h> #include <windows.h> #include <tchar.h> float f(float x, float y, float z) {float a x * x 9.0f / 4.0f * y * y z * z - 1;return a * a * a - x * x * z * z …

主机访问Android模拟器网络服务方法

0x00 背景 因为公司的一个手机app的开发需求&#xff0c;要尝试链接手机开启的web服务。于是在Android Studio的Android模拟器上尝试连接&#xff0c;发现谷歌给模拟器做了网络限制&#xff0c;不能直接连接。当然这个限制似乎从很久以前就存在了。一直没有注意到。 0x01 And…

玩转大数据11:数据可视化与交互式分析

1. 引言 数据可视化和交互式分析是大数据领域中的重要方面。随着大数据时代的到来&#xff0c;数据量越来越大&#xff0c;数据类型越来越复杂&#xff0c;传统的数据处理和分析方法已经无法满足我们的需求。数据可视化可以将复杂的数据以简单、直观的方式呈现出来&#xff0c…

Panalog 日志审计系统 sprog_deletevent.php SQL 注入漏洞复现

0x01 产品简介 Panalog大数据日志审计系统定位于将大数据产品应用于高校、 公安、 政企、 医疗、 金融、 能源等行业之中&#xff0c;针对网络流量的信息进行日志留存&#xff0c;可对用户上网行为进行审计&#xff0c;逐渐形成大数据采集、 大数据分析、 大数据整合的工作模式…

docker安装elasticsearch和kibana

docker系列 1、CentOS7安装docker 2、docker安装rabbitmq 3、docker安装mysql docker安装elasticsearch和kibana docker系列一、安装elasticsearch二、安装kibana三、安装ik分词器1、分词器说明2、安装分词器 本篇文章所采用的elasticsearch和kibana版本以及ik分词器都是7.12.…

【trino权威指南】使用trino详解:trino client安装、查询sql、DBeaver连接trino、java通过JDBC连接trino

文章目录 一. Trino CLI1. 安装client2. 使用client执行sql 二. JDBC driver 连接Trino1. 通过DBeaver用户界面连接2. JDBC Driver in java2.1. 环境配置2.2. 注册和配置driver2.3. 连接参数2.4. 查询例子 一. Trino CLI 1. 安装client Trino CLI提供了一个基于终端的交互式s…

大模型专题报告:AI大模型如何赋能智能座舱

今天分享的AI系列深度研究报告&#xff1a;《大模型专题报告&#xff1a;AI大模型如何赋能智能座舱》。 &#xff08;报告出品方&#xff1a;华泰证券&#xff09; 报告共计&#xff1a;32页 智能座舱: 4.0至5.0&#xff0c;从多模态到大模型 问题 1: 座舱智能化演进处于什么…

【MySQL进阶】索引使用

一、索引使用 1.验证索引效率 tb_sku 这张表中准备了 1000w 的记录。 我用夸克网盘分享了「1000w的模拟数据」链接&#xff1a;https://pan.quark.cn/s/15cf665202b2 这张表中id为主键&#xff0c;有主键索引&#xff0c;而其他字段是没有建立索引的。 我们先来查询其中的…

Grounding DINO、TAG2TEXT、RAM、RAM++论文解读

提示&#xff1a;Grounding DINO、TAG2TEXT、RAM、RAM论文解读 文章目录 前言一、Grounding DINO: Marrying DINO with Grounded Pre-Training for Open-Set Object Detection1、摘要2、背景3、部分文献翻译4、贡献5、模型结构解读a.模型整体结构b.特征增强结构c.解码结构 6、实…