こんにちは。CTOの馬場です。
HTTP負荷テストツール Tsung の話の第3回です。
今回は負荷テストのアクセスを、 よりリアルな負荷に近づけることに関連したTipsを紹介します。
なおこのエントリはTsung 1.6.0ベースで書いています。
DNS名前解決のケア
DNS名前解決の結果をキャッシュする負荷テストツールの場合、 DNSラウンドロビンによる分散が効きません。 その点Tsungは安心で、接続のたびにDNS名前解決します。
というわけでTsungの場合はうっかりDNSラウンドロビンしない心配はないのですが、 その代わりDNSに大量のアクセスを仕掛けることになります。 そのため以下いずれかの方法をとることをオススメします。
- 負荷をかけるサーバ上にUnboundなどをたてて名前解決する
- シナリオでは接続先をIPアドレスで指定する
なお接続先をIPアドレスで指定する場合、 受け側がNameVirtualHost構成であればHTTPのHostヘッダでFQDNを指定する必要があります。
Tsungの場合、それぞれの http
にHTTPのHostヘッダを忘れずに指定する必要があります。
ドキュメントのサンプルは以下のとおりです。
このサンプルでは Cache-Control
と Referer
を指定していますが、
Host
の場合もこんな感じで指定できます。
<request>
<http url="/bla" method="POST" contents="bla=blu&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.の段階になるとそれぞれのシナリオの発生比率を指定したくなります。
Tsungでは session
に probability
属性を指定します。
重要な注意事項があります。
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 )または弊社エンジニアにお声かけくださいませ。