压力测试之Apache ab

2022-10-25 15:41:54 浏览数 (1)

一 压力测试的概念

  • 吞吐率(Requests per second) 概念:服务器并发处理能力的量化描述,单位是reqs/s,指的是某个并发用户数下单位时间内处理的请求数。某个并发用户数下单位时间内能处理的最大请求数,称之为最大吞吐率。 计算公式:总请求数 / 处理完成这些请求数所花费的时间,即 Request per second = Complete requests / Time taken for tests
  • 并发连接数(The number of concurrent connections) 概念:某个时刻服务器所接受的请求数目,简单的讲,就是一个会话。
  • 并发用户数(The number of concurrent users,Concurrency Level) 概念:要注意区分这个概念和并发连接数之间的区别,一个用户可能同时会产生多个会话,也即连接数。
  • 用户平均请求等待时间(Time per request) 计算公式:处理完成所有请求数所花费的时间/ (总请求数 / 并发用户数),即 Time per request = Time taken for tests /( Complete requests / Concurrency Level)
  • 服务器平均请求等待时间(Time per request: across all concurrent requests) 计算公式:处理完成所有请求数所花费的时间 / 总请求数,即 Time taken for / testsComplete requests 可以看到,它是吞吐率的倒数。 同时,它也=用户平均请求等待时间/并发用户数,即 Time per request / Concurrency Level

测试工具有Apache ab ,jmeter 等 这里 说一说Apache ab

二 Apache ab

1. 安装

linux直接yum -y install httpd-tools,然后ab -V测试

windows:

  1. 下载并安装 https://www.apachehaus.com/cgi-bin/download.plx
  2. 查看80 443 端口有没有被占用,然后kill掉 netstat -ano | findstr “80” netstat -aon|findstr “443” tasklist |findstr “进程id” taskkill /f /t /im “进程id”(用管理员) 注意,要用管理员才能杀掉。。。
  3. 修改配置文件 找到安装目录下的httpd.conf

修改为自己的安装目录

  1. 让apache服务器以windows服务的方式运行 进入 bin目录下 cmd 然后 httpd.exe 就可以了 如果启动报下面这个错误,是因为配置文件问题,需要参照第三步修改
  1. 访问localhost,就可以看到页面
2.ab -help参数解释

-n即requests,用于指定压力测试总共的执行次数。

-c即concurrency,用于指定压力测试的并发数。

-t即timelimit,等待响应的最大时间(单位:秒)。

-b即windowsize,TCP发送/接收的缓冲大小(单位:字节)。

-p即postfile,发送POST请求时需要上传的文件,此外还必须设置-T参数。

-u即putfile,发送PUT请求时需要上传的文件,此外还必须设置-T参数。

-T即content-type,用于设置Content-Type请求头信息,例如:application/x-www-form-urlencoded,默认值为text/plain。

-v即verbosity,指定打印帮助信息的冗余级别。

-w以HTML表格形式打印结果。

-i使用HEAD请求代替GET请求。

-x插入字符串作为table标签的属性。

-y插入字符串作为tr标签的属性。

-z插入字符串作为td标签的属性。

-C添加cookie信息,例如:“Apache=1234”(可以重复该参数选项以添加多个)。

-H添加任意的请求头,例如:“Accept-Encoding: gzip”,请求头将会添加在现有的多个请求头之后(可以重复该参数选项以添加多个)。

-A添加一个基本的网络认证信息,用户名和密码之间用英文冒号隔开。

-P添加一个基本的代理认证信息,用户名和密码之间用英文冒号隔开。

-X指定使用的代理服务器和端口号,例如:“126.10.10.3:88”。

-V打印版本号并退出。

-k使用HTTP的KeepAlive特性。

-d不显示百分比。

-S不显示预估和警告信息。

-g输出结果信息到gnuplot格式的文件中。

-e输出结果信息到CSV格式的文件中。

-r指定接收到错误信息时不退出程序。

-h显示用法信息,其实就是ab -help。

3. 测试实例

进入bin目录 cmd

输入:ab -n 1000 -c 500 http://localhost:8080/incr

测试结果指标说明(常用的)

  • Concurrency Level 并发数多少,等于-c后面的数值
  • Time taken for tests 测试总耗时
  • Complete requests 成功收到返回的数目
  • Failed requests 请求失败数目,可能因为网络连接,异常,请求数据长度等等
  • Non-2xx responses 表示返回的HTTP status code不是2xx的数目(比如404,401,500…),如果都是2xx,这个指标不显示在结果里面
  • Requests per second 每秒请求数,等于总请求数/测试总耗时
  • Time per request 每一个请求平均花费时间。第一个Time per request等于concurrency * timetaken * 1000 / done,第二个Time per request(mean, across all concurrency requests)等于timetaken * 1000 / done,第一个可以理解为用户平均请求等待时间,第二可以理解为服务器平均请求等待时间

Jmeter 我这里就不多介绍了

参考我这篇文章:

https://cloud.tencent.com/developer/article/2139472

0 人点赞