网站性能压力测试是服务器网站性能调优过程中必不可缺少的一环。只有让服务器处在高压情况下,才能真正体现出软件、硬件等各种设置不当所暴露出的问题。
性能测试工具目前最常见的有以下几种:ab、http_load、webbench、siege。今天我们专门来介绍ab。
ab是apache自带的压力测试工具。ab非常实用,它不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试。比如nginx、tomcat、IIS等。
下面我们开始介绍有关ab命令的使用:
1.ab的原理
2.ab的安装
3.ab参数说明
4.ab性能指标
5.ab实际使用
6.测试nginx性能
1)ab的原理
ab是apachebench命令的缩写。
ab的原理:ab命令会创建多个并发访问线程,模拟多个访问者同时对某一URL地址进行访问。它的测试目标是基于URL的,因此,它既可以用来测试apache的负载压力,也可以测试nginx、lighthttp、tomcat、IIS等其它Web服务器的压力。
ab命令对发出负载的计算机要求很低,它既不会占用很高CPU,也不会占用很多内存。但却会给目标服务器造成巨大的负载,其原理类似CC攻击。自己测试使用也需要注意,否则一次上太多的负载。可能造成目标服务器资源耗完,严重时甚至导致死机。
2)ab的安装
ab的安装非常简单,如果是源码安装apache的话,那就更简单了。apache安装完毕后ab命令存放在apache安装目录的bin目录下。如下:
/usr/local/http2.4.23/bin/ab
如果apache 是通过yum的RPM包方式安装的话,ab命令默认存放在/usr/bin目录下。如下:
which ab
注意:如果不想安装apache但是又想使用ab命令的话,我们可以直接安装apache的工具包httpd-tools。如下:
yum -yinstall httpd-tools
查看ab是否安装成功,可以切换到上述目录下,使用ab –V命令进行检测。如下:
[root@www~]# /usr/local/http-2.4.23/bin/ab -V
This isApacheBench, Version 2.3 <$Revision: 1748469 $>
Copyright1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed toThe Apache Software Foundation, http://www.apache.org/
当出现报错是如下解决方法:(缺少动态库文件)
查找:#find / -namelibssl.*
找到后把路径复制下来写进/etc/ld.so.conf文件中
加载ldconfig使其命令生效
3)ab参数说明
有关ab命令的使用,我们可以通过帮助命令进行查看。如下:
[root@cent05~]# ab--help
下面我们对这些参数,进行相关说明。如下:
-n:在测试会话中所执行的请求个数(即总请求数)。
-c:一次产生的请求个数(即并发用户数)。
Linux最大文件数:1024
修改Linux最大文件数:#ulimit -n 文件数(临时生效)
把ulimit -n 文件数添加到/etc/profile文件中(永久生效)
[root@www ~]# ab -c 500 -n 10000http://192.168.31.83/index.html
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/
Benchmarking 192.168.31.83 (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
Server Hostname: 192.168.31.83
Server Port: 80
Document Path: /index.html #请求的资源
Document Length: 312 bytes#HTTP响应数据的正文长度
Concurrency Level: 500#并发个数(并发用户数)
Time taken for tests: 1.452 seconds#所有这些请求处理完成所花费的时间
Complete requests: 10000#完成请求数
Failed requests: 0#失败的请求数
Non-2xx responses: 10000
Total transferred: 4760000 bytes#表示所有请求的响应数据长度总和,包括每个HTTP响应数据的头信息和正文数据的长度。注意这里不包括HTTP请求数据的长度,仅仅为web服务器流向用户PC的应用层数据总长度。
HTMLtransferred: 3120000 bytes# 表示所有请求的响应数据中正文数据的总和,也就是减去了Totaltransferred中HTTP响应数据中的头信息的长度。
Requests per second: 7530.93 [#/sec] (mean) #吞吐量-每秒请求数。计算公式:Completerequests/Timetaken for tests
Time perrequest: 66.393 [ms] (mean) #用户平均请求等待时间,计算公式:Time token for tests/(Completerequests/Concurrency Level)。
Time perrequest: 0.133 [ms] (mean, across all concurrentrequests)#服务器平均请求等待时间,计算公式:Time takenfor tests/Complete requests。
Transfer rate: 3500.71 [Kbytes/sec] received#表示这些请求在单位时间内从服务器获取的数据长度,计算公式:Total trnasferred/ Time taken for tests,这个统计很好的说明服务器的处理能力达到极限时,其出口宽带的需求量。(即平均每秒网络上的流量)
Connection Times (ms)
min mean[+/-sd]median max
Connect: 10 27 7.3 27 48
Processing: 4 37 36.5 32 439
Waiting: 2 27 37.0 21 435
Total: 30 64 37.6 60 470
Percentage of the requests served within a certain time(ms)
50% 60
66% 63
75% 64
80% 66
90% 71
95% 76
98% 89
99% 261
100% 470 (longest request)
这部分数据用于描述每个请求处理时间的分布情况,比如以上测试,80%的请求处理时间都不超过66ms,这个处理时间是指前面的Time per request,即对于单个用户而言,平均每个请求的处理时间。
继续压力测试
我们再来进行一次压力测试,此时并发用户数为1000,其他条件不变,查看两次测试结果的吞吐量差别
4)ab性能指标
在进行性能测试过程中有几个指标比较重要:
(1)、吞吐率(Requests per second)
服务器并发处理能力的量化描述,单位是reqs/s,指的是在某个并发用户数下单位时间内处理的请求数。某个并发用户数下单位时间内能处理的最大请求数,称之为最大吞吐率。
记住:吞吐率是基于并发用户数的。这句话代表了两个含义:
a、吞吐率和并发用户数相关
b、不同的并发用户数下,吞吐率一般是不同的
计算公式:总请求数/处理完成这些请求数所花费的时间,即
Request per second=Complete requests/Time taken for tests
必须要说明的是,这个数值表示当前机器的整体性能,值越大越好。
(2)、并发连接数(The number of concurrent connections)
并发连接数指的是某个时刻服务器所接受的请求数目,简单的讲,就是一个会话。
(3)、并发用户数(Concurrency Level)
要注意区分这个概念和并发连接数之间的区别,一个用户可能同时会产生多个会话,也即连接数。
(4)、用户平均请求等待时间(Time per request)
计算公式:处理完成所有请求数所花费的时间/(总请求数/并发用户数),即:
Time perrequest=Time taken for tests/(Complete requests/Concurrency Level)
(5)、服务器平均请求等待时间(Time per request:across all concurrent requests)
计算公式:处理完成所有请求数所花费的时间/总请求数,即:
Time takenfor/testsComplete requests
可以看到,它是吞吐率的倒数。
同时,它也等于用户平均请求等待时间/并发用户数,即
Time perrequest/Concurrency Level