6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

5分でtsungを使った超シンプルな負荷試験環境を用意する

Posted at

できあがるもの

  • 単一エンドポイントに対して、ただひたすらリクエストを投げまくるようなシンプルな負荷試験環境
  • 負荷はクライアント側のインスタンスを増やせば結構どんどん増やせる(15,000qpsまでは確認済)
  • シナリオがー とか、計測のUIがー とか、料金がー とかは全く考えず、サクッと作ってサクッと試すためのもの

環境

  • GCP(AWSでもいけるはず)
  • クライアント(GCE) -> サーバー(GAE) の単一のendpointに対してリクエスト
  • GCEのOSはCentOS7

やることを3行で

    1. instanceを起動
    1. tsungをインストール
    1. 設定ファイルを用意&&実行

手順

1. instanceを用意

  • サーバーとなるGAEと同じリージョンでGCEのinstanceを起動させます
    • machine_typeはmicroとかでだいじょぶ
    • OSはCent7の前提ですすめる

2. tsungをインストール

  • tsungってなに?
    • Erlang性の負荷試験ツール -> tsung
  • 起動したインスタンスにログインしてrootになってyum installでおk

# ログイン
sudo su - 
yum install tsung

3. 設定ファイルを用意して実行

設定ファイルの作成

  • root直下に設定ファイル setting.xml を作成
  • この設定で秒間4000 - 5000qpsくらいリクエストが1時間ほど飛びます
  • 詳しい設定内容は -> tsung.config
setting.xml
<!DOCTYPE tsung SYSTEM "/usr/share/tsung/tsung-1.0.dtd">
<tsung loglevel="notice" version="1.0">

<clients>
  <client host='localhost' maxusers="1000000" use_controller_vm="true"/>
</clients>

<servers>
  <server host="myproject.appspot.com" port="443" type="ssl"/>
</servers>


<load>
  <arrivalphase phase="1" duration="60" unit="minute">
    <users maxnumber="10000000" arrivalrate="10" unit="second"/>
  </arrivalphase>
</load>

<sessions>
  <session probability="100" name="http-test" type="ts_http">
    <for from="1" to="1000" incr="1">
      <request subst="true">
    <http url="/some_path?param1=aaa&amp;param2=iii" method="GET" version="1.1" />
      </request>
    </for>
  </session>
</sessions>

</tsung>

tsungを実行


tsung -f setting.xml -l log start

以上。試験が終わったら立てたインスタンスは停止しましょう。

補足

  • 負荷を増やしたければクライアントとなるインスタンスを増やしていきましょう

    • 4インスタンスで15,000qpsになりました
  • クライアント側のログはroot直下の log/YYYYMMdd-HHDD/tsung.logに吐かれます

  • 10秒毎にログが吐かれるので例えば以下のようにtailすると10秒ごとのリクエスト数がわかったりします


tail -f log/20181030-0918/tsung.log | grep request
  • 動的にクエリパラメータを変えたりもできます
    • user & request_countをパラメータに指定してリクエストを送りたかったので以下のようにしました
    • %%hoge:fuga%% で囲ってライブラリ変数を指定すると出力できるようです
    • 詳しく -> Advanced Features
setting.xmlのsessionの部分

<sessions>
  <session probability="100" name="http-test" type="ts_http">
  <for from="1" to="1000" incr="1" var="counter">
    <request subst="true">
      <http url="/some_path?user=%%ts_user_server:get_unique_id%%&amp;counter=%%_counter%%" method="GET" version="1.1" />
    </request>
  </for>
  </session>
</sessions>

参考

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?