2. 压测工具 – Siege
最后更新于:2022-04-02 07:43:16
#### 安装方法
#### YUM安装(Centos7)
安装epel源(aliyun)
```shell
yum install siege
```
#### 编译安装(Centos6/7)
下载位置
```shell
http://download.joedog.org/siege/
wget -P /opt http://download.joedog.org/siege/siege-latest.tar.gz
```
安装
```shell
tar xzf siege-4.0.2.tar.gz
cd siege-4.0.2
./configure
make && make install
```
#### 主要参数
```shell
常用参数
-c,并发用户,默认为10
-r, 运行测试次数。
-t, 测试时间
核心参数
-d,建议配置为“1”,每个请求前的随机延迟
-i,随机点击URL。
-f,选择一个特定的URLS FILE。
-b,暴力测试,无延迟,查看某个压力下,资源的变化情况
压测控制参数
-q,关闭并禁止输出。
-l,--log [= FILE] LOG到FILE。如果没有指定FILE,则使用默认值:PREFIX/var/siege.log
定制化参数
-H,--header =“text”添加一个头来请求(可以是很多)
-A,--user-agent =“text”请求中设置用户代理
-T,--content-type =“text”在请求中设置Content-Type
```
#### 压测方法(以下内容如有错误,请告知改正)
##### 如何使用1台24核,16GB内存的服务器,模拟20000并发请求?
- 使用Centos7系统
- 做好内核中网络部分的优化
- 做好系统文件描述符的优化
- 建立10个用户(a...j)
##### 调整配置
每个用户下运行一次siege,会在用户目录下产生~/.siege/siege.conf的配置文件,该文件中需要调整2个限制参数
1. 出现多少次错误时停止,不包含404(按需调整)
failures
2. 最大单进程并发数量,默认25
concurrent = 5000
#### 压测方式
##### 基于请求的吞吐量(模拟真实请求)
例:20W请求,多长时间能够处理完成,并且没有错误产生
```shell
siege -c 1000 -r 20 -i
```
10用户,每个用户并发1000,循环20次
主要关注总时常、响应时间、平均每秒完成请求、错误数
##### 基于并发的暴力测试(了解瓶颈、规划容量)
例:20000并发,运行10分钟,观察服务器和应用的运行情况
```shell
siege -c 2000 -t 10m -b
```
10用户,每个用户2000并发,运行10分钟
主要关注响应时间、平均每秒完成请求、平均每秒传送数据、实际最高并发
##### 共同关注,系统资源消耗和压测对象状态监控
系统资源监控使用dstat
```shell
dstat -t -a -l -m --tcp --top-cpu --output /tmp/145-2c10240-15000.txt
```
Web服务器监控
```shell
Zabbix监控状态页或内部运行情况
```
#### 执行压测时,siege可能出现的几种情况
- 压测后卡住,10个用户,有些压测进程压测完成后退出失败
```shell
取可用结果,平均后乘以10,作为压测结果,总耗时和响应时间,只平均不乘10
```
- 自身资源不足
```shell
系统优化
实际使用时,压测比较消耗内存
```
- Web服务器处理失败(到达处理瓶颈)
```shell
[error] socket: -872327424 connection timed out.: Connection timed out
[error] socket: read error Connection reset by peer sock.c:539: Connection reset by peer
```
#### 真实案例
举例:压测Nginx,15000并发,页面大小150kB,压缩后800字节
Nginx配置
```shell
gizp on
worker_processes=2
worker_connections 10240
```
##### 压测结果(部分)
用户a
```shell
Transactions: 10454 hits
Availability: 100.00 %
Elapsed time: 30.05 secs
Data transferred: 6.89 MB
Response time: 1.94 secs
Transaction rate: 347.89 trans/sec
Throughput: 0.23 MB/sec
Concurrency: 674.49
Successful transactions: 11805
Failed transactions: 0
Longest transaction: 16.98
Shortest transaction: 0.00
```
用户b
```shell
Transactions: 21462 hits
Availability: 100.00 %
Elapsed time: 30.06 secs
Data transferred: 13.32 MB
Response time: 0.74 secs
Transaction rate: 713.97 trans/sec
Throughput: 0.44 MB/sec
Concurrency: 528.73
Successful transactions: 22830
Failed transactions: 0
Longest transaction: 8.57
Shortest transaction: 0.00
```
>备注:取5个用户,平均后乘10。但总用时,响应时间只平均,不乘10
|Trans|Elap Time|Data Trans|Resp Time|Trans Rate|Throughput|Concurrent|
| :------------: | :------------: | :------------: | :------------: | :------------: | :------------: | :------------: |
|150404|30.32|95.54|1.262|5008|3.16|5788.76|
';