初めまして。かとあつと申します。 2013年6月からVASILYで主にAPIとフロントエンドのプログラムをいじっています。 今回はAPIサーバのパフォーマンスが気になる人に嬉しい便利ツール2つ紹介します。SiegeとHTTPingです。 目新しい訳ではないですがいずれもライトなので、小規模の受託や1人開発のサービスなんかでも試しやすい筈です!
Siege
Siege is an http load testing and benchmarking utility.
Siege(スィージ)はHTTP負荷テストツールです。 ベーシック認証,cookies,HTTP,HTTPSサポート。 仮想ユーザを大量に作って、インターネットからのアクセスをそれっぽくシミュレートしてくれます。 インターフェースはApache Benchに近いので、ABを使った事ある人なら直感的に使える筈です。
インストール
$ wget http://www.joedog.org/pub/siege/siege-3.0.5.tar.gz $ tar xfvz siege-3.0.5.tar.gz $ cd siege-3.0.5 $ ./configure $ make $ sudo make install
実行
負荷を掛けたいURLリストをURL.txtとして保存して、以下のように実行します。
$ siege -b -i -r 150 -c 100 -f URL.txt
- -b ベンチマークモード。仮想ユーザは待たずにアクセスを繰り返す。(これを設定しないと仮想ユーザは1アクセス毎に1秒以上待つ)
- -i インターネットモード。仮想ユーザは与えられたURLリストからランダムにアクセスする。
- -r 与えられたURLリストの繰り返し回数。
- -c 仮想ユーザの多重度。
- -f URLリストのファイル名。
URLリストについて、iQONは公開済みサービスという点と、実環境と近いテストをしたいという点から、HTTPサーバのアクセスログを元にURLリストを作りました。 リリース前案件であれば、性能要件と相談して作る必要があります。
結果
以下のような値が取れます。(マスクだらけですみません。)
Transactions: xxxxx hits Availability: 99.97 % Elapsed time: 39.83 secs Data transferred: xxxx.xx MB Response time: 0.20 secs Transaction rate: xxxx.xx trans/sec Throughput: xx.xx MB/sec Concurrency: xxx.xx Successful transactions: xxxxx Failed transactions: xx Longest transaction: x.xx Shortest transaction: x.xx
URL毎に成功/失敗も分かります。
豆
Siegeは、(城・都市などの)包囲攻撃 みたいな意味らしいです。 パラレルで負荷を掛けるイメージにぴったりですね。
感想
軽快で、インストールも実行も容易なので、パフォーマンスの定点観測にはもってこいだと思いました!
HTTPing
Httping is like 'ping' but for http-requests.
HTTPのPingなイメージの物です。 特定のURLに対して、Pingのようなインターフェースでレイテンシとスループットを計測できます。
iOS/Androidから!
スマホ開発していると「スマホの通信のせいかも!?」「3G経由だと上手く行かない!?」みたいなことがあるので、iOS/AndroidにもHTTPingが出来る物を入れています。 HTTPingのオリジナルは多分Linux用の物なのですが、iOS/Android用のものが凄く便利なのでこっちを先に紹介します。 HTTPing for iOS HTTPing for Android メジャーサービスと自社サービスとを合わせて登録して一緒に確認できるので、端末自体の問題なのか、自社サービスの問題なのかの切り分けも出来ます。
Linux用ツールに話を戻します。
インストール
お使いのパッケージマネージャで入ると思います。入らない方は以下から。
$ wget http://www.vanheusden.com/httping/httping-2.3.3.tgz $ tar xfvz httping-2.3.3.tgz $ cd httping-2.3.3 $ ./configure $ make $ sudo make install
実行
$ httping -s http://example.com
- -s ステータスコードを表示させる
結果
PING example.com:80 (/): connected to 93.184.216.119:80 (344 bytes), seq=0 time=234.61 ms 200 OK connected to 93.184.216.119:80 (344 bytes), seq=1 time=227.52 ms 200 OK connected to 93.184.216.119:80 (344 bytes), seq=2 time=351.41 ms 200 OK
Ctl+Cで停止するまでレスポンスがリアルタイムで見れます。
感想
やはり、スマホから最初の切り分けがさくっと出来るのは便利ですね。 CLIも、リアルタイムで見慣れた形式でパフォーマンスが見れるのは嬉しいです。
最後に
サーバのレスポンスは速くて沢山返せる程良いにこした事はないのですが、ハードウェア調達コストやシステムチューニングコストは無限に払えないので、性能要件と実際のパフォーマンスとを把握して先の戦略を練る必要がありますよね。 VASILYでは一緒に未来の戦略を練れるエンジニアを求めています! 興味のある方は是非一度オフィスに遊びにきてください!