发表于2年前(2013-03-21 12:13) 阅读(
1146) | 评论(1) 1人收藏此文章, 我要收藏
咱们经常使用apache下的并发测试工具ab进行动态或静态页面URL的并发测试,以此做为服务器性能、配置以及系统架构是否合乎要求的一个衡量标准。 可是有一个问题,就是ab的表现并不稳定,在不一样的机器上用ab对同一个服务器上的URL资源作测试经常出现大相径庭的数据。就算在同一台机器上用ab作 测试,测试10组数据,也会有几组的数据存在较大的差别,如下是我曾作过的几组试验,先介绍下试验步骤及环境。
一、首先准备一台机器做为web服务器,硬件配置为硬件配置为Intel(R) Celeron(R) CPU G530 @ 2.40GHz 32位 内存4G 双核,系统版本CentOS release 5.5,web服务器版本Apache/2.2.14。
二、web服务器采用apache,采用worker模式,具体配置为:
默认开启5个进程,每一个进程下2个线程,最大开75个线程(此参数关系到实际系统开启的进程数,若是开启进程设置过多,以最大线程数为准),最大链接数为500。
三、apache以调用php模块的方式执行php脚本(非fast-cgi模式)。
四、首先在两台不一样的机器上对此服务器用ab进行压测,将两台不一样的机器编号为A与B,A为一台笔记本,性能较差,2G内存,且上面运行了一些程序占用 了必定比率的CPU及内存。B为一台台式机,硬件配置为CPU Intel G530 2.4GHz 内存 4GB,下面是测试数据:
A
50个并发,执行50次页面(每一个链接执行一次页面,页面为phpinfo页面)
平均执行时间在17~18秒 简直不能忍
B
50个并发,执行50次页面
平均执行时间在0.2秒左右 毫无压力(3次平均)
100个并发,执行100次页面
平均执行时间在0.4秒左右 (3次平均)
200个并发,执行200次页面
平均执行时间在0.8秒左右(3次平均)
用A机器进行的测试结果,并发量连50都达不到,但用B机器测试WEB服务器能够胜任200个并发处理。为何会出现如此大相径庭的数据差异,仍是要从原理上来分析。
ab是客户端模拟多线程来经过socket对服务器发起TCP请求,并等待服务器处理执行页面输出页面结果并返回到客户端以此来计算页面的执行时间等相 关数据。那么客户端CPU处理多线程的能力,测试时客户机的CPU状态、内存状态都会对测试结果形成影响,若是客户机同时处理这么多请求的能力很弱,那么 须要很长时间才能将请求发送到服务器,服务器处理完后也须要很长时间对返回数据作处理,这样就达不到测试服务器性能的要求了。由于时间都被客户机耗去了。 因此咱们在测试的时候首先要选择好测试机,尽可能选择性能较好的机器测试。由于得出的结论是天差地别的。
五、接下来咱们单独用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
在高并发下的执行结果也比较稳定。
六、接下来咱们在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页面进行测试,这样测 试的准确度会更高。