Apache附带的ab工具(本机使用的PHP环境是WAMP集成环境,ab工具位于D:\wamp\bin\apache\Apache2221\bin)非常容易使用,ab可以直接在Web服务器本地发起测试请求,这至关重要,因为有些时候我们需要测试的仅仅是服务器的处理性能,并不想掺杂着网络传输时间的影响。ab进行一切测试的本质都是基于>
测试本机是否正确安装ab工具,在power shell想将当前目录定位到bin,输入 \ab –V 命令,如果安装正确,则会将其版本信息打印出来。
PS D:\wamp\bin\apache\Apache2221\bin> \ab -V
This is ApacheBench, Version 23 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, >
好了,一切就绪,下面提供一个压力测试的实例:
输入命令 PS
D:\wamp\bin\apache\Apache2221\bin> \ab -n1000 -c10 )下面开始解析这条命令语句:启动ab,并出入三个参数(PS D:\wamp\bin\apache\Apache2221\bin> \ab -n1000 -c10 >
-n1000 表示请求总数为1000
-c10 表示并发用户数为10
>
测试结果也一目了然,测试出的吞吐率为:Requests per second: 201593 [#/sec] (mean) 初次之外还有其他一些信息。
Server Software 表示被测试的Web服务器软件名称
Server Hostname 表示请求的URL主机名
Server Port 表示被测试的Web服务器软件的监听端口
Document Path 表示请求的URL中的根绝对路径,通过该文件的后缀名,我们一般可以了解该请求的类型
Document Length 表示>
Concurrency Level 表示并发用户数,这是我们设置的参数之一
Time taken for tests 表示所有这些请求被处理完成所花费的总时间
Complete requests 表示总请求数量,这是我们设置的参数之一
Failed requests 表示失败的请求数量,这里的失败是指请求在连接服务器、发送数据等环节发生异常,以及无响应后超时的情况。如果接收到的>
Total transferred 表示所有请求的响应数据长度总和,包括每个>
HTML transferred 表示所有请求的响应数据中正文数据的总和,也就是减去了Total transferred中>
Requests per second 吞吐率,计算公式:Complete requests / Time taken for tests
Time per request 用户平均请求等待时间,计算公式:Time token for tests/(Complete requests/Concurrency Level)
Time per requet(across all concurrent request) 服务器平均请求等待时间,计算公式:Time taken for tests/Complete requests,正好是吞吐率的倒数。也可以这么统计:Time per request/Concurrency Level
Transfer rate 表示这些请求在单位时间内从服务器获取的数据长度,计算公式:Total trnasferred/ Time taken for tests,这个统计很好的说明服务器的处理能力达到极限时,其出口宽带的需求量。
Percentage of requests served within a certain time(ms) 这部分数据用于描述每个请求处理时间的分布情况,比如以上测试,80%的请求处理时间都不超过6ms,这个处理时间是指前面的Time per request,即对于单个用户而言,平均每个请求的处理时间。
未完待续。。。
我们常常使用apache下的并发测试工具ab进行动态或静态页面URL的并发测试,以此作为服务器性能、配置以及系统架构是否合乎要求的一个衡量标准。 但是有一个问题,就是ab的表现并不稳定,在不同的机器上用ab对同一个服务器上的URL资源做测试常常出现截然不同的数据。就算在同一台机器上用ab做 测试,测试10组数据,也会有几组的数据存在较大的差异,以下是我曾做过的几组试验,先介绍下试验步骤及环境。1、首先准备一台机器作为web服务器,硬件配置为硬件配置为Intel(R) Celeron(R) CPU G530 @ 240GHz 32位 内存4G 双核,系统版本CentOS release 55,web服务器版本Apache/2214。
2、web服务器采用apache,采用worker模式,具体配置为:
默认开启5个进程,每个进程下2个线程,最大开75个线程(此参数关系到实际系统开启的进程数,如果开启进程设置过多,以最大线程数为准),最大连接数为500。
3、apache以调用php模块的方式执行php脚本(非fast-cgi模式)。
4、首先在两台不同的机器上对此服务器用ab进行压测,将两台不同的机器编号为A与B,A为一台笔记本,性能较差,2G内存,且上面运行了一些程序占用 了一定比率的CPU及内存。B为一台台式机,硬件配置为CPU Intel G530 24GHz 内存 4GB,下面是测试数据:
A
50个并发,执行50次页面(每个连接执行一次页面,页面为phpinfo页面)
平均执行时间在17~18秒 简直不能忍
B
50个并发,执行50次页面
平均执行时间在02秒左右 毫无压力(3次平均)
100个并发,执行100次页面
平均执行时间在04秒左右 (3次平均)
200个并发,执行200次页面
平均执行时间在08秒左右(3次平均)
用A机器进行的测试结果,并发量连50都达不到,但用B机器测试WEB服务器可以胜任200个并发处理。为什么会出现如此截然不同的数据差别,还是要从原理上来分析。
ab是客户端模拟多线程来通过socket对服务器发起TCP请求,并等待服务器处理执行页面输出页面结果并返回到客户端以此来计算页面的执行时间等相 关数据。那么客户端CPU处理多线程的能力,测试时客户机的CPU状态、内存状态都会对测试结果造成影响,如果客户机同时处理这么多请求的能力很弱,那么 需要很长时间才能将请求发送到服务器,服务器处理完后也需要很长时间对返回数据做处理,这样就达不到测试服务器性能的要求了。因为时间都被客户机耗去了。 所以我们在测试的时候首先要选择好测试机,尽量选择性能较好的机器测试。因为得出的结论是天差地别的。
5、接下来我们单独用B机器进行测试,进行高强度的测试,连续测试20组数据,以200个并发、执行200次页面为测试条件,测试页面还是phpinfo页面,以下是测试数据:
每秒请求数:237 每个请求执行时间:843
每秒请求数:237 每个请求执行时间:843
每秒请求数:237 每个请求执行时间:843
每秒请求数:237 每个请求执行时间:843
每秒请求数:237 每个请求执行时间:843
每秒请求数:237 每个请求执行时间:843
每秒请求数:237 每个请求执行时间:843
每秒请求数:237 每个请求执行时间:843
每秒请求数:237 每个请求执行时间:843
每秒请求数:237 每个请求执行时间:843
每秒请求数:237 每个请求执行时间:843
每秒请求数:237 每个请求执行时间:843
每秒请求数:237 每个请求执行时间:843
每秒请求数:237 每个请求执行时间:843
每秒请求数:237 每个请求执行时间:843
每秒请求数:237 每个请求执行时间:843
每秒请求数:237 每个请求执行时间:843
每秒请求数:237 每个请求执行时间:843
每秒请求数:237 每个请求执行时间:843
测试结果非常稳定,没有大差异的结果。那么用300个并发、执行300次页面为测试条件结果会是怎样呢,以下是测试数据:
每秒请求数:79 每个请求执行时间:3765
每秒请求数:80 每个请求执行时间:3718
每秒请求数:81 每个请求执行时间:3671
每秒请求数:80 每个请求执行时间:3750
每秒请求数:79 每个请求执行时间:3796
每秒请求数:81 每个请求执行时间:3687
每秒请求数:79 每个请求执行时间:3765
每秒请求数:82 每个请求执行时间:3656
每秒请求数: 81 每个请求执行时间:3703
每秒请求数: 82 每个请求执行时间:3640
在高并发下的执行结果也比较稳定。
6、接下来我们在web服务器上进行测试,看测试结果是怎样的,测试10组数据 以200个并发、执行200次页面为测试条件,测试页面为phpinfo页面,以下是测试数据:
每秒请求数:1716 每个请求执行时间:116
每秒请求数:1764 每个请求执行时间:113
每秒请求数:1706 每个请求执行时间:117
每秒请求数:1643 每个请求执行时间:114
每秒请求数:1767 每个请求执行时间:113
每秒请求数:1732 每个请求执行时间:115
每秒请求数:727 每个请求执行时间:274
每秒请求数:249 每个请求执行时间:801
每秒请求数:1728 每个请求执行时间:115
每秒请求数:113每个请求执行时间: 1765
以上结果,比在B机器上表现的更好,但存在几个不稳定的数据。分析一下,一方面是网络传输速度的原因导致(本机上网络传输速度更快,所以成绩较好)。另一 方面是由于ab本身在执行的时候消耗的cpu的性能,但这个我的观点是影响可以忽略不计。还有一方面导致数据不稳定的因素可能是由于TCP连接在上一次测 试时为完全释放导致的原因。
综上所述,对于测试web服务器的性能,我们最好可以找一台独立的、性能较好的、并且上面没有运行很多应用程序的机器进行测试,这样的结果会更接近生产环 境的实际结果。实际的php页面执行复杂度可能是phpinfo的好几倍,所以在选定测试页面时,可以预先做一些复杂度更高的php页面进行测试,这样测 试的准确度会更高。原文链接: >网站性能压力测试是服务器网站性能调优过程中必不可缺少的一环。只有让服务器处在高压情况下,才能真正体现出软件、硬件等各种设置不当所暴露出的问题。
性能测试工具目前最常见的有以下几种:ab、>
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)