为什么要压力测试?
网站性能压力测试是服务器网站性能调优过程中必不可缺少的一环。只有让服务器处在高压情况下,才能真正体现出软件、硬件等各种设置不当所暴露出的问题。
性能测试工具目前最常见的有以下几种:ab、http_load、webbench、siege
。今天我们专门来介绍 ab。
ab的原理
ab 是 apachebench 命令的缩写。
ab 的原理:ab 命令会创建多个并发访问线程,模拟多个访问者同时对某一 URL 地址进行访问。
它的测试目标是基于 URL 的,因此,它既可以用来测试 apache 的负载压力,也可以测试 nginx、lighthttp、tomcat、IIS 等其它 Web 服务器的压力。
ab 命令对发出负载的计算机要求很低,它既不会占用很高 CPU,也不会占用很多内存。但却会给目标服务器造成巨大的负载,其原理类似 CC 攻击。自己测试使用也需要注意,否则一次上太多的负载。可能造成目标服务器资源耗完,严重时甚至导致死机
ab命令相关参数:
-c 并发数
-n 请求次数
-H header
-p body 将body中 json 串写到 a.json 中
-T POST数据所使用的Content-type头信息
ab的安装
ab 的安装非常简单,如果是源码安装 apache 的话,那就更简单了。apache 安装完毕后 ,ab命令存放在 apache 安装目录的 bin 目录下。
如下:/usr/local/httpd/bin/ab
如果 apache 是通过 yum 的 RPM 包方式安装的话,ab 命令默认存放在/usr/bin 目录下。如下:
which ab
注意:如果不想安装 apache 但是又想使用 ab 命令的话,我们可以直接安装 apache 的工具包 httpd-tools。
如下:
yum -y install httpd-tools
ab安装完成后可以通过ab -V查看
[root@www ~]# ab -V
This is ApacheBench, Version 2.3 <$Revision: 1748469 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
如果 ab –V 命令出错,可以 exporexportLD_LIBRARY_PATH="/usr/local/openssl/lib/"
就可以了。
安装完后测试效果如下:
[root@mysql ~]# ab -c 100 -n 10000 http://192.168.10.3/index.php
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 192.168.10.3 (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests
Server Software: Apache/2.4.25
Server Hostname: 192.168.10.3
Server Port: 80
Document Path: /index.php #请求的资源
Document Length: 84894 bytes #HTTP响应的正文长度
Concurrency Level: 100 #并发个数(并发用户数)
Time taken for tests: 28.734 seconds #处理这些请求所用的时间
Complete requests: 10000 #完成请求数
Failed requests: 1032
(Connect: 0, Receive: 0, Length: 1032, Exceptions: 0)
Write errors: 0
Total transferred: 850648843 bytes #所有请求的总长度
HTML transferred: 848938843 bytes #所有请求的响应数据中正文数据的总和,也就是减去了 Total transferred 中 HTTP 响应数据中的头信息的长度。
Requests per second: 348.02 [#/sec] (mean) #每秒请求数
Time per request: 287.342 [ms] (mean) #用户平均等待时间
Time per request: 2.873 [ms] (mean, across all concurrent requests) #服务器平均等待时间
Transfer rate: 28910.23 [Kbytes/sec] received #表示单位时间内从服务器获取的数据长度
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 1 1.1 0 24
Processing: 21 286 147.0 276 3108
Waiting: 15 114 139.0 57 2916
Total: 22 287 147.0 277 3109
Percentage of the requests served within a certain time (ms)
50% 277
66% 300
75% 318
80% 330
90% 368
95% 402
98% 450
99% 508
100% 3109 (longest request)
————————————————
版权声明:本文为CSDN博主「@李子矜」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43815140/article/details/105035476
具体应用可以参考博文:https://blog.csdn.net/weixin_43815140/article/details/105035476
ab性能指标
吞吐率(Requests per second)
服务器并发处理能力的量化描述,单位是 reqs/s,指的是在某个并发用户数下单位时间内处理的请求数。某个并发用户数下单位时间内能处理的最大请求数,称之为最大吞吐率。
记住:吞吐率是基于并发用户数的。
并发连接数(The number of concurrent connections)
并发连接数指的是某个时刻服务器所接受的请求数目,简单的讲,就是一个会话并发用户数(Concurrency Level)
要注意区分这个概念和并发连接数之间的区别,一个用户可能同时会产生多个会话,也即连接数用户平均请求等待时间(Time per request)
计算公式:处理完成所有请求数所花费的时间/(总请求数/并发用户数)服务器平均请求等待时间(Time per request:across all concurrent requests)
计算公式:处理完成所有请求数所花费的时间/总请求数,可以看到,它是吞吐率的倒数。同时,它也等于用户平均请求等待时间/并发用户数,即:Time per request/Concurrency Level