【搞定Go语言】第3天22:常用的HTTP服务压测工具介绍
在项目正式上线之前,我们通常需要通过压测来评估当前系统能够支撑的请求量、排查可能存在的隐藏bug,同时了解了程序的实际处理能力能够帮我们更好的匹配项目的实际需求,节约资源成本。
HTTP服务压力测试工具
在项目正式上线之前,我们通常需要通过压测来评估当前系统能够支撑的请求量、排查可能存在的隐藏bug,同时了解了程序的实际处理能力能够帮我们更好的匹配项目的实际需求,节约资源成本。
压测相关术语
响应时间(RT) :指系统对请求作出响应的时间.
吞吐量(Throughput) :指系统在单位时间内处理请求的数量
QPS每秒查询率(Query Per Second) :“每秒查询率”,是一台服务器每秒能够响应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。
TPS(TransactionPerSecond):每秒钟系统能够处理的交易或事务的数量
并发连接数:某个时刻服务器所接受的请求总数
压力测试工具
ab
ab全称Apache Bench,是Apache自带的性能测试工具。使用这个工具,只须指定同时连接数、请求数以及URL,即可测试网站或网站程序的性能。
通过ab发送请求模拟多个访问者同时对某一URL地址进行访问,可以得到每秒传送字节数、每秒处理请求数、每请求处理时间等统计数据。
命令格式:
ab [options] [http://]hostname[:port]/path
常用参数如下:
-n requests 总请求数
-c concurrency 一次产生的请求数,可以理解为并发数
-t timelimit 测试所进行的最大秒数, 可以当做请求的超时时间
-p postfile 包含了需要POST的数据的文件
-T content-type POST数据所使用的Content-type头信息
更多参数请查看官方文档。
例如测试某个GET请求接口:
ab -n 10000 -c 100 -t 10 "http://127.0.0.1:8080/api/v1/posts?size=10"
测试POST请求接口:
ab -n 10000 -c 100 -t 10 -p post.json -T "application/json" "http://127.0.0.1:8080/api/v1/post"
wrk
wrk是一款开源的HTTP性能测试工具,它和上面提到的ab同属于HTTP性能测试工具,它比ab功能更加强大,可以通过编写lua脚本来支持更加复杂的测试场景。
Mac下安装:
brew install wrk
常用命令参数:
-c --conections:保持的连接数
-d --duration:压测持续时间(s)
-t --threads:使用的线程总数
-s --script:加载lua脚本
-H --header:在请求头部添加一些参数
--latency 打印详细的延迟统计信息
--timeout 请求的最大超时时间(s)
使用示例:
wrk -t8 -c100 -d30s --latency http://127.0.0.1:8080/api/v1/posts?size=10
输出结果:
Running 30s test @ http://127.0.0.1:8080/api/v1/posts?size=108 threads and 100 connectionsThread Stats Avg Stdev Max +/- StdevLatency 14.55ms 2.02ms 31.59ms 76.70%Req/Sec 828.16 85.69 0.97k 60.46%Latency Distribution50% 14.44ms75% 15.76ms90% 16.63ms99% 21.07ms198091 requests in 30.05s, 29.66MB read
Requests/sec: 6592.29
Transfer/sec: 0.99MB
go-wrk
go-wrk是Go语言版本的wrk,Windows同学可以使用它来测试,使用如下命令来安装go-wrk:
go get github.com/adeven/go-wrk
使用方法同wrk类似,基本格式如下:
go-wrk [flags] url
常用的参数:
-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的频率
执行测试:
go-wrk -t=8 -c=100 -n=10000 "http://127.0.0.1:8080/api/v1/posts?size=10"
输出结果:
==========================BENCHMARK==========================
URL: http://127.0.0.1:8080/api/v1/posts?size=10Used Connections: 100
Used Threads: 8
Total number of calls: 10000===========================TIMINGS===========================
Total time passed: 2.74s
Avg time per request: 27.11ms
Requests per second: 3644.53
Median time per request: 26.88ms
99th percentile time: 39.16ms
Slowest time for request: 45.00ms=============================DATA=============================
Total response body sizes: 340000
Avg response body per request: 34.00 Byte
Transfer rate per second: 123914.11 Byte/s (0.12 MByte/s)
==========================RESPONSES==========================
20X Responses: 10000 (100.00%)
30X Responses: 0 (0.00%)
40X Responses: 0 (0.00%)
50X Responses: 0 (0.00%)
Errors: 0 (0.00%)
【搞定Go语言】第3天22:常用的HTTP服务压测工具介绍相关推荐
- 【零基础搞定C语言——导航汇总篇】
声明:C语言初阶和进阶全部笔记已更新结束,初阶部分适合零基础同学阅读,进阶部分是建立在初阶基础之上的深入.由于作者水平有限,本文难免有错误和不准确之处,本人也很想知道这些错误,恳望读者批评指正,大家一 ...
- 一文搞定R语言拟合p值、R方...
R:ggplot2拟合,我推荐geom_smooth绘制拟合和ggpmisc添加统计信息. 几行代码就可以搞定了,对新手非常友好. 线性拟合 library(tidyverse) library(re ...
- 逗比老师带你搞定C语言指针
哈喽!各位同学们大家好哇!逗比老师又回来了!好久都没有见到大家了真是想死我了! 最近呢,我有一个亲戚,还在读大学,正在学C语言,然后他在我的博客上看到了我之前写过的C教程,结果没有几篇就戛然而止了,于 ...
- 【五】 C语言基础知识学习回顾 | 一篇搞定C语言基础 | 内附详细代码以及注释
一 .C语言学习第一天 1.1 编写C语言代码:hello.c #include<stdio.h> #include<stdlib.h> //调用system系统函数需要包含的 ...
- 100代码搞定C语言游戏开发,编程原来如此简单
序言 虽然说学完了C语言入门,但是实际能力还是停留在一个很低的水平,基本上就是套几个for循环,暴力解一下排列组合问题的水平.这次的编写控制台贪吃蛇程序对我来说是一个不小的挑战. 文本版的贪吃蛇用的东 ...
- r语言各形状编号_190+张图片!吐血整理!搞定R语言基础绘图全部知识点
转自:生信宝典|Bio_Data,不一样的生信学习平台 原文链接:ggplot2高效实用指南 (可视化脚本.工具.套路.配色) 作者:严涛 浙江大学作物遗传育种在读研究生(生物信息学方向)伪码农,R语 ...
- 轻松搞定c++语言pdf_当年锤子的大爆炸,如今12个语言版本都可轻松搞定!
第011期原创分享 作者:huber 大家好,我是Hub哥!又被Hub友们催更了. 这些天,刷抖音看到罗永浩老师的直播带货,发现了老罗的一些变化,头发少了几千根啊(瞎猜的),言行举止少了往日怼天怼地的 ...
- 一文搞定C语言本地变量和全局变量
前言 最近在重新学习C语言,发现了之前本科阶段好多知识都学的不够牢固,现特地重新学习并一同记录下来.那么什么是本地变量,什么又是全局变量呢? 本地变量 本地变量:直白地讲,本地变量就是在函数内部定义地 ...
- 万字长文搞定C语言指针
目录: 1.指针是什么? 2.定义和使用指针变量 定义指针变量 指针的初始化.赋值.取值 指针变量的交换 3.指针变量作为函数参数 4.通过指针引用数组 ...
- 搞定 Go 语言,不会这些可不行
发现一个 2021 年报告,显示 Go 是最想学习的编程语言 Go 到如今的火爆程度,不仅仅是因为有个好爹.上手快,一周就能入门上手,正常人写的 Go 都不会太差.有人说,它有一种迷人的气质,很难用语 ...
最新文章
- DataSet导出CSV格式(ASP.NET,C#)
- SEEK FREE |智能车竞赛计时器使用说明
- 著名ERP厂商的SSO单点登录解决方案介绍一
- Redis的发布订阅模式以及在SpringBoot中的使用
- 认知无线电matlab代码详解,认知无线电频谱感知之功率检测matlab代码.docx
- 5926. 买票需要的时间
- [Windows]python+PyQT+Eric安装配置
- 计算机保护地阻值,机房接地系统的一般接地电阻要小于多少欧姆?
- Qt笔记-QCryptographicHash摘要算法调用(MD5,SHA等)
- 【emWin】例程一:emWin系列教程简介
- python下载文件并改名_Python遍历文件夹并批量改名
- NoSQL和Redis简介及Redis在Windows下的安装和使用教程
- 如何自己编写Makefile(高级篇)
- 使用Aspose.Cells 根据模板生成excel里面的 line chart
- HCIE证书有用吗?
- exercise006_字符串的全排列
- 求网络号、子网号、主机号、子网网络地址、子网广播地址
- 微信公众号java开发沉淀(五)推送群发消息
- matexs不支持鸿蒙,华为mateXs为何从兼容安卓改成基于安卓,是鸿蒙不行还是另有隐情...
- DTO-VO-DO-Query理解
热门文章
- qq四国军旗2.1 beat03 builde017记牌器开发思路(二)
- 四川取消英语计算机考试,2020年起,四川将不再承接全国英语等级考试,已有多省份停考!...
- linux下Js加载so,JavaScript文件加载器LABjs API详解
- 2008年17款远程控制软件大比拼
- 10、一篇经典的域渗透文章
- 计算机网络是指将多台具有独立功能,计算机等级考试四级网络工程师2015年模拟试题及答案(三)...
- U盘安装Ghost XP系统教程
- 中国航空标准件市场运行动态分析及十四五发展规划研究报告2022年版
- 怎么通过服务器性能计算tpmc,如何对服务器性能计算的公式参考(tpmc-tpcc)...pdf
- Cesium的坐标拾取