# MAC下安装使用wrk压测工具

## 安装

### 方法一 brew 安装 仅限mac:100:

```sh
brew install wrk
```

> 其他系统建议使用docker安装

### 方法二 docker 安装 全平台

```sh
# pull镜像
docker pull williamyeh/wrk

# 启动一次性容器
# docker run --rm williamyeh/wrk -t2 -c5 -d5s -H 'Host: example.com' --timeout 2s http://$APP1_PRIVATE_IP:3000/
# 本次使用命令
docker run --rm williamyeh/wrk -t8 -c200 -d30s --latency  http://www.bing.com
```

## 基本使用

命令行敲下wrk，可以看到使用帮助

```sh
使用方法: wrk <选项> <被测HTTP服务的URL>                            
  Options:                                            
    -c, --connections <N>  跟服务器建立并保持的TCP连接数量  
    -d, --duration    <T>  压测时间           
    -t, --threads     <N>  使用多少个线程进行压测   

    -s, --script      <S>  指定Lua脚本路径       
    -H, --header      <H>  为每一个HTTP请求添加HTTP头      
        --latency          在压测结束后，打印延迟统计信息   
        --timeout     <T>  超时时间     
    -v, --version          打印正在使用的wrk的详细版本信息

  <N>代表数字参数，支持国际单位 (1k, 1M, 1G)
  <T>代表时间参数，支持时间单位 (2s, 2m, 2h)
```

### 压测

```sh
wrk -t8 -c200 -d30s --latency  "http://www.bing.com"
```

> 以上使用8个线程200个连接，对bing首页进行了30秒的压测为了
>
> 为了保证结果的正确性，已办时间控制在15-30s

- **-t**参数: 建议使用CPU核心数 * 2

- **--latency**参数：（延迟分布）如果想看响应时间的分布情况可以加上

### 结果分析

```sh
Running 30s test @ http://www.bing.com （压测时间30s）
  8 threads and 200 connections （共8个测试线程，200个连接）
  Thread Stats   Avg      Stdev     Max   +/- Stdev
              （平均值） （标准差）（最大值）（正负一个标准差所占比例）
    Latency    46.67ms  215.38ms   1.67s    95.59%
    （延迟）
    Req/Sec     7.91k     1.15k   10.26k    70.77%
    （处理中的请求数）
  Latency Distribution （延迟分布）
     50%    2.93ms
     75%    3.78ms
     90%    4.73ms
     99%    1.35s （99分位的延迟）
  1790465 requests in 30.01s, 684.08MB read （30.01秒内共处理完成了1790465个请求，读取了684.08MB数据）
Requests/sec:  59658.29 （平均每秒处理完成59658.29个请求）
Transfer/sec:     22.79MB （平均每秒读取数据22.79MB）
```

> 在 wrk 的测试结果中，有一项为`Requests/sec`，我们一般称之为QPS（每秒请求数），这是一项压力测试的性能指标，通过这个参数我们可以看出应用程序的吞吐量。

![image-20200811113236881](./assets/image-20200811113236881.png)