当前位置: 首页 > news >正文

97. 常用的HTTP服务压测工具

文章目录

  • 导言
  • 一、ab
  • 二、wrk
  • 三、go-wrk

导言

在项目正式上线之前,我们通常需要通过压测来评估当前系统能够支撑的请求量、排查可能存在的隐藏bug,同时了解了程序的实际处理能力能够帮我们更好的匹配项目的实际需求(服务器实例个数,如需要部署1048G的机器),节约资源成本。

压测相关术语

  • 响应时间(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-wrkGo语言版本的wrkWindows同学可以使用它来测试,使用如下命令来安装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%)
http://www.lryc.cn/news/313565.html

相关文章:

  • 活动预告|听云猿生数据创始人 CEO 曹伟分享云数据库行业十余年经验总结
  • 数仓实战——京东数据指标体系的构建与实践
  • Alias许可配置
  • 【读书笔记】针对ICS的ATTCK矩阵详解(一)
  • Rust多线程访问数据,推荐使用mutex还是channel?
  • 基于pytorch的手写体识别
  • Leetcode 56. 合并区间
  • C++:List的使用和模拟实现
  • 20个Python函数程序实例
  • Wireshark——获取捕获流量的前N个数据包
  • 006-浏览器输入域名到返回
  • 【kubernetes】关于k8s集群如何将pod调度到指定node节点?
  • 【框架】React和Vue的异同
  • 如何选择阅读软件技术学习书籍
  • 做抖店用平板能代替电脑操作吗?抖店运营相关注意事项,注意规避
  • 【FastChat】用于训练、服务和评估大型语言模型的开放平台
  • 从根到叶:深入理解二叉搜索树
  • 网络信息安全:11个常见漏洞类型汇总
  • 阿里云服务器使用教程_2024建站教程_10分钟网站搭建流程
  • 【排序算法】推排序算法解析:从原理到实现
  • Python爬虫实战(基础篇)—13获取《人民网》【最新】【国内】【国际】写入Word(附完整代码)
  • 常见控件应用
  • 什么是降压恒流芯片?它有什么作用?
  • 14:00面试,15:00就出来了,问的问题过于变态了。。。
  • Maven的settings.xml配置
  • 利用redis实现秒杀功能
  • vscode 使用ssh进行远程开发 (remote-ssh),首次连接及后续使用,详细介绍
  • rabbitmq总结
  • 专利预审是什么
  • 淘宝商品详情数据丨商品搬家丨商品采集丨商城建站