【Siege】Macでお手軽負荷試験

#【Siege】Macでお手軽負荷試験

##Siegeって？

「シージ」と読みます。「包囲」とかっていう意味らしい。
手軽に導入できる負荷試験ツールです。

今回、試験したいAPIがあったので手軽に試せるSiegeをチョイスしました。

##環境

僕のマシン、少し古い型ではありますが一度修理に出しているのでまだまだ現役機。
欲を言うと新型欲しいので駄々こねたら買ってもらえそう。
古い型を使用している社員から順次購入して行くとのことなので順番待ちですね。

- MacBook Pro (Retina, 15-inch, Mid 2015)
- プロセッサ
  - 2.2 GHz Intel Core i7
- メモリ
  - 16 GB 1600 MHz DDR3

##導入

```bash
## 久しくアップデートしてないので念の為
$ brew update

## ドドスコインスコ
$ brew install siege
```

##Usage

```bash
$ siege [オプション] URL
```

基本的な利用方法はこのようなコマンドになります。

[ページ下部](#siege---help)に`siege --help`の内容を載せておきます。
Google翻訳で訳しただけですけど参考になれば。

##実際に使ってみる

使い方はなんとなく理解したけど、複数URLにリクエスト送れるの？

**できます！！**

ターミナルを複数立ち上げてですね、それぞれの画面でSiegeを実行すれば。。。。!!

ではなく、オプションでURLの記載されたファイルを指定できます!!
毎回コマンド打つのだるいのでスクリプトファイルにしますか。

ちなみに今回は、Dockerで立ち上げたローカルサーバーへリクエストを送ってみます。

```bash
## dockerじゃないけど。超適当
## [code]はVSCodeのシェルです...
$ code ~/dockers/siege/sample.sh ~/dockers/siege/URLs.txt
```

```txt:URLs.txt
http://localhost/page001
http://localhost/page002
```

```bash:sample.sh
## siege
##      --concurrent : 同時接続人数
##      --time       : 指定した時間テスト
##      --benchmark  : 遅延なしモード
##      --file       : URLの記載されたファイルのパス
siege\
    --concurrent=5 \
    --time=10s \
    --benchmark \
    --file=./URLs.txt
```

```bash
$ sh sample.sh
$ sh sample.sh 
** SIEGE 4.0.4
** Preparing 5 concurrent users for battle.
The server is now under siege...
HTTP/1.1 200     1.22 secs:      25 bytes ==> GET  /page001
~中略~
HTTP/1.1 200     1.35 secs:      50 bytes ==> GET  /page002

Lifting the server siege...
Transactions:                     34 hits
Availability:                 100.00 %
Elapsed time:                   9.41 secs
Data transferred:               0.00 MB
Response time:                  1.31 secs
Transaction rate:               3.61 trans/sec
Throughput:                     0.00 MB/sec
Concurrency:                    4.73
Successful transactions:          34
Failed transactions:               0
Longest transaction:            1.83
Shortest transaction:           1.15
```

良い感じ。
`-g`オプションとかつければよかったですね。

次回の記事は、別の負荷試験系のツールを紹介したいと思います。

##所感

手軽で便利です！
オプションも豊富で「かゆいところに手が届かない」なんてことも少ないと思います。

しかし慣れの問題だと思うんですが、本格的にやるならJMeterやApacheBenchの方が好きですね。

##siege --help

```bash
$siege --help
SIEGE 4.0.4
使用法：siege [オプション]
       siege [オプション] URL
       siege -g URL
オプション：
  -V、-version VERSION、バージョン番号を出力します。
  -h、-help HELP、このセクションを出力します。
  -C、-config CONFIGURATION、現在の構成を表示します。
  -v、-verbose VERBOSE、通知を画面に出力します。
  -q、-quiet QUIETは詳細をオフにし、出力を抑制します。
  -g、-GET GET、HTTPヘッダーをプルダウンして表示
                            トランザクション。アプリケーションのデバッグに最適です。
  -p、-print PRINT。GETと同様に、ページ全体を印刷します。
  -c、-concurrent = NUM​​同時ユーザー、デフォルトは10
  -r、-reps = NUM​​ REPS、テストを実行する回数。
  -t、-time = NUM​​m TIMEDテスト（「m」は修飾子S、M、またはH）
                            例：--time = 1H、1時間のテスト。
  -d、-delay = NUM​​時間遅延、各要求の前のランダム遅延
  -b、-benchmark BENCHMARK：リクエスト間に遅延はありません。
  -i、-internetインターネットユーザーシミュレーション、URLをランダムにヒットします。
  -f、-file = FILE FILE、特定のURLSファイルを選択します。
  -R、-rc = FILE RC、siegercファイルを指定します
  -l、-log [= FILE]ファイルへのログ。 FILEが指定されていない場合、
                            デフォルトが使用されます：PREFIX / var / siege.log
  -m、--mark = "text" MARK、ログファイルに文字列でマークを付けます。
                            .001とNUMの間。 （統計には含まれません）
  -H、--header = "text"要求にヘッダーを追加します（多くの場合あり）
  -A、-user-agent = "text"要求でユーザーエージェントを設定します
  -T、--content-type = "text"リクエストにContent-Typeを設定します
      --no-parser NO PARSER、HTMLページパーサーをオフにする
      --no-follow NO FOLLOW、HTTPリダイレクトに従いません

Copyright（C）2017 by Jeffrey Fulmer、et al。
これはフリーソフトウェアです。コピー条件のソースを参照してください。
保証はありません。市場性やフィットネスでもない
特定の目的のため。
```