HTTP服务压力测试工具及相关术语讲解
作者:Jeff的技术栈 发布时间:2024-05-08 10:23:31
前言
在项目正式上线之前,我们通常需要通过压测来评估当前系统能够支撑的请求量、排查可能存在的隐藏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=10
8 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 14.55ms 2.02ms 31.59ms 76.70%
Req/Sec 828.16 85.69 0.97k 60.46%
Latency Distribution
50% 14.44ms
75% 15.76ms
90% 16.63ms
99% 21.07ms
198091 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=10
Used 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%)
来源:https://www.cnblogs.com/guyouyin123/p/14582577.html


猜你喜欢
- 程序设计是困难的,其核心是管理的复杂性。计算机程序是人类做出的最复杂的东西。质量是不可靠的且隐蔽的。好的体系架构是必需给程序足够的结构使其健
- 本文实例为大家分享了python实现学生成绩管理系统的具体代码,供大家参考,具体内容如下需求:代码:import osfilename =
- vbscript脚本中,fso对象CreateTextFile方法调用时可能会报“无效的过程调用或参数”错误,在使用ASP生成静态页面时,如
- 前言日志收集项目的准备中,本文主要讲的是利用golang的tail库,监听日志文件的变动,将日志信息发送到kafka中。涉及的golang库
- 前言前几天切换了node版本,顺带着升级了npm,今天使用nodemon启动node环境时发现报错,提示未安装。没安装就安装了下,结果!冒出
- 实现了在一个字段存储以逗号分隔的字符串,返回一个相应的列表from django import formsfrom django.db im
- 使用MySql的窗口函数统计数据时,发现一个小的问题,与大家一起探讨下。环境配置:mysql-installer-community-8.0
- 可以查看: OPEN SYMMETRIC KEY 命令关于 对称密钥加密使用证书解密 CREATE MASTER KEY ENCRYPTIO
- 如何使用dialog弹窗1.官网示例因为这次是在手机上用的所以就用了vant组件2.第一步引入vant中的dialog组件官网介绍自行选择安
- 基于微信开放的个人号接口python库itchat,实现对微信好友的获取,并对省份、性别、微信签名做数据分析。效果:直接上代码,建三个空文本
- python中的列表和元组# 1.列表的格式# [数据1,数据2,数据3,···]# 列表 可变数据类型# 列表可以存储多个数据,数据之间的
- 前言Tensorflow的核心与NumPy非常相似,但具有GPU支持;Tensorflow支持分布式计算(跨多个设备和服务器)。像NumPy
- 谷歌内部的 python 代码规范熟悉 python 一般都会努力遵循 pep8 规范,也会有一些公司制定内部的代码规范。大公司制定规范的目
- <div id="msg"></div> <input type="text&q
- 本文记录了NLTK 3.2.4 环境搭建的方法,供大家参考,具体内容如下系统环境:win7 32位python:2.7.13,后改为3.6.
- 写出来的效果图就是这样了:下面就更新一下全部的代码吧还是老样子先定义import pygame,sysimport ra
- mysql设置大小写不敏感原理与参数mysql大小写敏感配置与两个参数相关 —— lower_cas
- 在 jupyter notebook参数化运行python 时,怕输出太多文件太大,想及时清除 notebook 的输出。在别人代码里看到用
- k-近邻算法概述简单地说,k近邻算法采用测量不同特征值之间的距离方法进行分类。k-近邻算法优点:精度高、对异常值不敏感、无数据输入假定。缺点
- 至于对好广告的评判,不同的人有不同的标准,一些人认为那些打动人、有新意、有共鸣的广告是好广告,另一些人的观点则是:观众喜欢与否,不是广告好与