概述
有很多工具来进行web服务器的性能测试,有免费开源的,有商业许可的。
Siege是一个开源的,主要用于web服务器的压力测试和评测工具,设计用于WEB开发这评估应用在压力下的承受能力:可以根据配置对一个WEB站点进行多用户的并发访问,记录每个用户所有请求过程的相应时间,并在一定数量的并发访问下重复进行。
Siege是一个多线程http负载测试和基准测试工具。
这是Linux系统下的一个测试工具,完全使用C语言实现,可以对HTTP和FTP服务器进行负载和性能测试。通过使用Siege 提供的功能,可以很容易的制定测试计划:包括规定使用并发用户数、重复数量,从而可以模拟在服务器、网络或者其它对象上附加负载以测试他们提供服务的受压能力,方便的测试服务器的性能。最后,利用Siege提供的测试结果来分析性能指标或者分析他们提供的服务在不同负载条件下的性能情况,分析测试结果,找出影响系统性能的瓶颈。
github开源仓库地址:https://github.com/JoeDog/siege
Linux系统安装siege
源码编译安装siege
先安装git,然后从github仓库下载,也可以直接下载relsease发行包
git clone https://github.com/JoeDog/siege.git
或
wget https://github.com/JoeDog/siege/archive/refs/tags/v4.1.5.tar.gz
# 解压安装包
tar -xvf siege-latest.tar.gz
#切换到解压目录
cd siege-4.1.5/
# 查看目录下是否有configure文件
ls
# 如果没有configure文件,则先执行如下命令,生成configure文件
./utils/bootstrap
# 编译前需要做一点配置。
# ./configure命令会为siege生成配置信息,并检查编译所需要的库文件。
./configure
# 编译安装
make && make install
默认的安装目录是/usr/local/bin/
查看siege的版本:
siege -V 或 siege --version
SIEGE 4.1.7-b5
Copyright (C) 2023 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
[root@sc-test-001 siege]# siege --config
CURRENT SIEGE CONFIGURATION
Mozilla/5.0 (pc-x86_64-linux-gnu) Siege/4.1.7-b5
Edit the resource file to change the settings.
----------------------------------------------
version: 4.1.7-b5
verbose: true
color: true
quiet: false
debug: false
protocol: HTTP/1.1
HTML parser: enabled
get method: HEAD
connection: close
concurrent users: 25
time to run: n/a
repetitions: n/a
socket timeout: 30
cache enabled: false
accept-encoding: gzip, deflate
delay: 0.000 sec
internet simulation: false
benchmark mode: false
failures until abort: 1024
named URL: none
URLs file: /usr/local/etc/urls.txt
thread limit: 255
logging: false
log file: /usr/local/var/log/siege.log
resource file: /root/.siege/siege.conf
timestamped output: false
comma separated output: false
allow redirects: true
allow zero byte data: true
allow chunked encoding: true
upload unique files: true
json output: false
no-follow:
- ad.doubleclick.net
- pagead2.googlesyndication.com
- ads.pubsqrd.com
- ib.adnxs.com
proxy auth:
www auth:
主要参数有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 https://www.baidu.com
-c 15 表示15个并发连接用户;
-r 10 表示每个用户的请求数量为10;
-q 表示 quiet,只输出结果,不输出过程。
如果不指定这些选项,那么siege将从配置文件中读取默认的参数。
有些参数是不能通过命令选项来指定的,比如socket timeout,默认为30秒,我们只能在配置文件中修改它。
常用参数说明:
输入名称 – | –解释说明 |
---|---|
-V, –version | 打印版本信息 |
-h, –help | 打印帮助信息 |
-C, –config | 显示配置信息 |
-v, –verbose | 打印冗余配置信息。 |
-g, –get | 显示HTTP交易。 |
-c, –concurrent=NUM | 设置并发用户数 |
-u, –url=”URL” | 设置被测Web的URL |
-i, –internet | 用户模拟、随机访问URL |
-b, –benchmark . | 基准测试。 |
-t, –time=NUM | 设置测试时间。 |
-r, –reps=NUM | 设置测试次数 |
-f, –file=FILE | 更改配置文件存档 |
-R, –rc=FILE | 更改siegerc文件和环境变量 |
-l, –log | 测试日志 |
-m, –mark=”text” | 标记测试日志 |
-d, –delay=NUM | 设置时间延迟 |
-H, –header=”text” | 增加测试头文件 |
-A, –user-agent=”text” | 设置代理测试请求 |
示例
测试百度首页 100并发, 执行两次
siege -c 50 -r 2 https://www.baidu.com -i -b
Transactions: 100 hits //一共访问100次
Availability: 100.00 % // 访问成功率100%
Elapsed time: 0.21 secs // 测试一共用了0.21秒
Data transferred: 0.02 MB //测试传输的数据量
Response time: 64.90 ms //平均响应时间0.064秒
Transaction rate: 476.19 trans/sec //每秒事务处理量 tps (Transactions /Elapsed time)
Throughput: 0.10 MB/sec // 每秒吞吐量 (Data transferred/Elapsed time)
Concurrency: 30.90 //并发用户数=Transactions*Response time(秒) /Elapsed time(秒) = 100*0.064/0.21
Successful transactions: 100 //成功100
Failed transactions: 0 //失败0
Longest transaction: 180.00 ms //最长响应时间0.18秒
Shortest transaction: 30.00 ms //最短响应时间
siege的两种模式:default 和 benchmark
在default模式下,模拟用户在发出一个请求后,默认会延迟1秒再发出下一个请求。延迟时间可以在配置文件中修改。default模式适用于负载测试(load testing)。
在benchmark模式下,模拟用户的请求没有延迟。在服务器和网络带宽允许的条件下,模拟用户会以最快的速度发出下一个请求。我们可以在命令中加入-b 指定siege以benchmark模式运行。
siege性能测试
好了,现在来进行正式的性能测试。我们需要将web服务器置于高度负载量下,为了达到这个目的,siege要以benchmark模式运行,并指定较高的并发用户数量(concurrent users)以及合理的单个用户请求数量(repetitions)。比如下面的命令
为了得到错误率以及吞吐量的数据,timeout参数必须要指定,默认的timeout为30秒。错误率是失败请求与总请求的比率。如果一个请求超过了30秒还没有得到回复,那么这个请求就是失败请求。吞吐量是指web服务器每秒可以发送的数据容量。
同时我们需要确保siege不会因为大量错误而取消测试。我们可以在配置文件中更改failures until abort的值以达到这个目的。
为了得到响应时间的数据,我们运行同样的命令,但是需要把timout的值给删掉。这种测试不会有任何错误,但响应时间会增加。
为了减少测试数据误差,我们要用同样的命令选项对web服务器进行多次性能测试,最后得出平均的数据。