几款压力测试工具

压力测试工具林林总总,数不胜数,这里只列举几个命令行下常用的工具,来看看那种用的比较顺手,纯粹个人意见。

  • ab (apache benchmark,因为是apache自带的工具,所以用的人比较多)
  • siege (一个不错的开源压力测试工具,简单,好用)
  • httperf (据说很强大,但参数实在繁琐,不考虑)

ab

ab是apache自带的测试工具,很多情况下我们要测试一个网站在并发100下的响应速度,用下面的命令就行

1
ab -n1000 -c100 http://domain.com/

可不要少了最后的那个’/’,ab接受的url必须是schema, domain, path一个不少的。

其他像添加header,post参数等等的,man一下ab的手册吧。

长久以来我一直以ab作为webserver性能的一个指标,因为使用确实简单,直到遇见了siege。

siege

siege应该也有些年头了,2000年的时候就已经有这个软件了,直到最近更新了3.0.1版本。在第一次使用的时候,需要用siege.config在主目录下面生成一个配置文件.siegerc。这类文件常用linux的人应该很清楚了,里面每个选项都有明确的注释。需要注意的是delay这个值,做一般测试的时候会按照这个设定的时间间隔停顿,那么这样压力测试出来的结果就不准了,所以在做压测的时候需要加上’-b’参数,或者直接将这个参数设置为0。下面是一个100并发测试10秒钟的例子。

1
siege -b -c100 -t10S http://domain.com/

siege的一个缺点是没法设置总请求数,但是可以通过重复数和并发数组合来求出总请求数,例如我们要在100并发下发送1000个请求,就用下面的命令,当然这个时候就不能用’-t’参数了

1
siege -b -c100 -r10 http://domain.com/

结果与ab差不多,但是他会将历次测试的结果保存在一个文件中供以后比较。

测试

这里我分别用nodejs和php写了两个server脚本,响应值都是’hello world’,都用单一进程作为web server。(php5.4之后用-S参数来启动服务)。

测试结果:

1
2
3
(request/second)        php     nodejs
siege                   2500    2000
ab                      4880    3480

测试软件的评判标准不一样,所以测试结果有差距也比较合理,不能由此说明谁比谁更准确。但是在测试中nodejs的性能比php要慢20%这个倒是让我觉得比较惊讶,看来nodejs在运算效率上并不占优势。但是在复杂的web应用中,更多的时间开销在io中,nodejs合理的将这部分等待时间利用了起来,才会让人感觉比较快吧。

很早就有人对这几款测试软件做了横向的对比,有兴趣可以看一下,其中keepalive和no-keepalive的效率差距比较大,我自己测试时觉得并不明显,可能是写的例子比较单一吧。

今后假如需要做简单的压力测试,我还是比较倾向于使用siege。

Comments