HEARTBEATS

こんにちは。CTOの馬場です。

HTTP負荷テストツール Tsung の話の第3回です。

  1. Tsungで負荷テストしよう(1) - 基礎知識
  2. Tsungで負荷テストしよう(2) - 実践Tips
  3. Tsungで負荷テストしよう(3) - リアルな負荷のためのTips

今回は負荷テストのアクセスを、 よりリアルな負荷に近づけることに関連したTipsを紹介します。

なおこのエントリはTsung 1.6.0ベースで書いています。

DNS名前解決のケア

DNS名前解決の結果をキャッシュする負荷テストツールの場合、 DNSラウンドロビンによる分散が効きません。 その点Tsungは安心で、接続のたびにDNS名前解決します。

というわけでTsungの場合はうっかりDNSラウンドロビンしない心配はないのですが、 その代わりDNSに大量のアクセスを仕掛けることになります。 そのため以下いずれかの方法をとることをオススメします。

  • 負荷をかけるサーバ上にUnboundなどをたてて名前解決する
  • シナリオでは接続先をIPアドレスで指定する

なお接続先をIPアドレスで指定する場合、 受け側がNameVirtualHost構成であればHTTPのHostヘッダでFQDNを指定する必要があります。

Tsungの場合、それぞれの http にHTTPのHostヘッダを忘れずに指定する必要があります。

6.6.2. HTTP

ドキュメントのサンプルは以下のとおりです。 このサンプルでは Cache-ControlReferer を指定していますが、 Host の場合もこんな感じで指定できます。

<request>
  <http url="/bla" method="POST" contents="bla=blu&amp;name=glop">
    <www_authenticate userid="Aladdin" passwd="open sesame"/>
    <http_header name="Cache-Control" value="no-cache"/>
    <http_header name="Referer" value="http://www.w3.org/"/>
  </http>
</request>

複数のユーザ行動の割合を指定

負荷テストをする場合、たいていは以下の流れになると思います。

  1. 特定の機能を対象にした負荷をかけて個別にチューニング( 例: 検索機能ばかりたくさん使う )
  2. システム全体を俯瞰して利用者の行動を模した負荷をかけて全体をチューニング

1.の段階ではシンプルなシナリオをポコポコと流していればよいのですが、 2.の段階になるとそれぞれのシナリオの発生比率を指定したくなります。 Tsungでは sessionprobability 属性を指定します。

6.6. Sessions

重要な注意事項があります。 probability は合計で100になる必要があります。 まあ当たり前といえば当たり前ですね。

<sessions>
  <session name="http-example" probability="70" type="ts_http">
    ...
  </session>
  <session name="http-example" probability="20" type="ts_http">
    ...
  </session>
  <session name="http-example" probability="10" type="ts_http">
    ...
  </session>
</sessions>

%ではなく比率で指定したい場合は、 probability の代わりに weight で指定することもできます。

ドキュメントに以下のサンプルが載っています。

この場合、 s1:s2 が 2:1 (s1はs2の2倍)になります。

<session name="s1" weight="2" type="ts_http">
<session name="s2" weight="1" type="ts_http">

3回に渡ってTsungについてじっくり紹介しました。 こんな使い方があるよ、これってどうするの?などあったら私( @netmarkjp )または弊社エンジニアにお声かけくださいませ。

  1. Tsungで負荷テストしよう(1) - 基礎知識
  2. Tsungで負荷テストしよう(2) - 実践Tips
  3. Tsungで負荷テストしよう(3) - リアルな負荷のためのTips

株式会社ハートビーツの技術情報やイベント情報などをお届けする公式ブログです。