Linux系统下安装siege 网页服务器性能测试工具
我们可以用很多工具来测试web服务器的性能,有些是免费开源的,有些是需要商业许可的。siege是一个免费开源的工具,用于web服务器的压力测试。
给siege指定一个URL,siege就可以模拟大量用户来测试web服务器性能。siege提供的测试结果包括耗费时间、总数据传输量,服务器响应时间、吞吐量、并发连接数量等。
源码编译安装siege
很多Linux发行版的软件库中都收录了siege,但软件库中的版本一般都比较旧,我们可以自己下载最新版本来安装。在写这篇文章时,最新版本为3.1.2。首先下载安装包,在终端中输入下面的命令:
wget http://download.joedog.org/siege/siege-latest.tar.gz
解压安装包:
tar -xvf siege-latest.tar.gz
切换到解压目录
cd siege-3.1.2/
编译前需要做一点配置。./configure命令会为siege生成配置信息,并检查编译所需要的库文件。
./configure
configure完成后,输入下面两条命令编译并安装siege:
make sudo make install
make会生成一个二进制文件,make install将生成的二进制文件安装到指定的目录下。默认的安装目录是/usr/local/bin/
查看siege的版本:
siege -V 或 siege --version
SIEGE 3.1.2 Copyright (C) 2015 by Jeffrey Fulmer, et al. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
siege默认的配置参数
在使用siege进行性能测试来,让我们来看看siege默认的配置参数。输入下面的命令:
siege -C 或 siege --config
默认的配置参数如下:
CURRENT SIEGE CONFIGURATION Mozilla/5.0 (unknown-x86_64-linux-gnu) Siege/3.1.2 Edit the resource file to change the settings. ---------------------------------------------- version: 3.1.2 verbose: true quiet: false debug: false protocol: HTTP/1.1 get method: HEAD connection: close concurrent users: 15 time to run: n/a repetitions: n/a socket timeout: 30 accept-encoding: gzip delay: 1.000 sec internet simulation: false benchmark mode: false failures until abort: 1024 named URL: none URLs file: /usr/local/etc/urls.txt logging: true log file: /usr/local/var/siege.log resource file: /usr/local/etc/siegerc timestamped output: false comma separated output: false allow redirects: true allow zero byte data: true allow chunked encoding: true upload unique files: true
我们关心的参数有5个:
- concurrent users: 指定用户数量,默认为15
- failures until abort: failure超过一定的数量就终止测试,默认为1024
- time to run: 测试时间,默认为n/a,没有指定
- repetitions: 每个用户的请求数量,默认为n/a, 没有指定
- resource file: 资源文件,也就是配置以上参数的文件,文件路径为/usr/local/etc/siegerc
由于默认的配置文件没有指定time to run和repetitions,所以默认情况下siege会一直测试下去,直到failure的数量超过1024。我们需要根据自己的需要修改配置文件,指定time to run 和repetitions。或者, 我们可以在siege运行的时候通过命令选项来指定,比如下面的命令:
siege -c 15 -r 10 -q http://www.example.com
-c 15 表示15个并发连接用户;-r 10 表示每个用户的请求数量为10;-q 表示 quiet,只输出结果,不输出过程。如果不指定这些选项,那么siege将从配置文件中读取默认的参数。
有些参数是不能通过命令选项来指定的,比如socket timeout,默认为30秒,我们只能在配置文件中修改它。
siege的两种模式:default 和 benchmark
在default模式下,模拟用户在发出一个请求后,默认会延迟1秒再发出下一个请求。延迟时间可以在配置文件中修改。default模式适用于负载测试(load testing)。
在benchmark模式下,模拟用户的请求没有延迟。在服务器和网络带宽允许的条件下,模拟用户会以最快的速度发出下一个请求。我们可以在命令中加入-b 指定siege以benchmark模式运行。
siege性能测试
好了,现在来进行正式的性能测试。我们需要将web服务器置于高度负载量下,为了达到这个目的,siege要以benchmark模式运行,并指定较高的并发用户数量(concurrent users)以及合理的单个用户请求数量(repetitions)。比如下面的命令
siege -b -c 400 -r 50 -q http://www.example.com
- 为了得到错误率以及吞吐量的数据,timeout参数必须要指定,默认的timeout为30秒。错误率是失败请求与总请求的比率。如果一个请求超过了30秒还没有得到回复,那么这个请求就是失败请求。吞吐量是指web服务器每秒可以发送的数据容量。
- 同时我们需要确保siege不会因为大量错误而取消测试。我们可以在配置文件中更改failures until abort的值以达到这个目的。
- 为了得到响应时间的数据,我们运行同样的命令,但是需要把timout的值给删掉。这种测试不会有任何错误,但响应时间会增加。
- 为了减少测试数据误差,我们要用同样的命令选项对web服务器进行多次性能测试,最后得出平均的数据。
测试结果
[error] socket: read error Connection reset by peer sock.c:479: Connection reset by peer done. Transactions: 18818 hits Availability: 94.09 % Elapsed time: 14.29 secs Data transferred: 130.14 MB Response time: 0.19 secs Transaction rate: 2600.70 trans/sec Throughput: 9.11 MB/sec Concurrency: 492.12 Successful transactions: 1182 Failed transactions: 2336 Longest transaction: 5.02 Shortest transaction: 0.00
在测试结果中,我们可以看到4个有用的数据。
- availability: 可用率,用100%减去可用率就可以得到错误率
- response time: 响应时间
- transaction rate: web服务器每秒处理的请求数量
- throughput: web服务器每秒发送的数据容量