1 of 11

負荷テストツール

Tsungについて

gumi TECH Drinkup #3

@matsuu

2 of 11

自己紹介

@matsuuです

IT系はてなブックマーカー(id:tmatsuu)

ISUCON好き

職場は今日の会場から徒歩5分

好きな負荷テストツールはTsungとGatling

3 of 11

負荷テストツールTsungとは

  • http://tsung.erlang-projects.org/
  • Erlang実装の負荷テストツール(GPLv2)
  • HTTPのみならず、WebDAV、SOAP、PostgreSQL、MySQL、LDAP、XMPP/Jabber、BOSH、AMQP、MQTTなどに対応(SSL/TLSもok)
  • TCP、UDP、WebSocket、TLS/SSLもok
  • プロキシ動作によるレコーディング機能あり
  • SNMP、Munin、もしくはErlangエージェントによるCPU/メモリ/トラフィックモニタリング機能あり
  • 最新バージョンは1.7.0(2017/08/30)、もうすぐ1.8.0が出るかも?

4 of 11

Tsungの読み方

Tsung = Tsunami Next Generation

「つん」とか「つんぐ」とか「つ・えぬじー」とか

私は「つん」と読んでます

5 of 11

Tsungのいいところ

  • 低スペックでも高負荷をかけられる
  • 負荷を到着率(arraivalrate)で書ける
    • 1秒あたり100ユーザがアクセスする、など
    • 100クライアントを用意して繰り返しアクセスするではない
  • 負荷をかける側、かけられる側のどちらもクラスタリング構成が可能
    • かける側のクラスタリング構成はssh接続ができればok
  • 複数のIPアドレスをいい感じにハンドリングできる
    • ソースポート枯渇問題を回避可能
  • Cookie、レスポンス参照、乱数生成などは標準装備
    • さらに凝ったことはErlarngで書ける
  • 公式ドキュメントがメチャクチャ充実
    • 英語が苦手でもサンプル豊富でコピペしやすい

6 of 11

Tsungのツライところ

  • 設定ファイルがXMLが故のXMLの罠
    • QueryString中の&は&に変更など
  • 設定ファイルの一貫性が怪しい
    • URLパスを記入する属性名がurl
    • User-Agentはリクエスト横断で設定できるが、その他のリクエストヘッダーはリクエストごとに設定が必要

7 of 11

Tsungのインストール手順

RHEL/CentOS 7であればEPELから最新版がインストール可能

Ubuntuは18.04であれば標準パッケージから最新版がインストール可能

macOSはbrew install tsungで最新版がインストール可能

その他の環境は./configure && make && make install(公式ドキュメント参照)

8 of 11

Tsungの実行方法

設定ファイルを書く(~/.tsung/tsung.xml)

tsung start を実行する

結果確認(127.0.0.1:8091にアクセスもしくはtsung_statsでHTML出力)

9 of 11

Tsungの設定ファイルと出力結果のサンプル

別添参照

10 of 11

負荷テストTIPS

  • 到着率で指定できる負荷テストを使用するのがオススメ
    • 私の知る限りTsungとGatlingぐらいではないか
  • 負荷テストツールのDNS解決タイミングを確認しよう
    • TsungはリクエストのたびにDNS解決を行うのでDNSキャッシュ、hostsファイル、IP直指定
  • ソースポート枯渇問題に対応しよう
    • net.ipv4.ip_local_port_range = “1024 65000”
    • アクセス元IPアドレスを増やす
  • 負荷テストは条件を変えずに5分以上かけよう
    • しばらくかけないとアクセスが滞留していることに気づきにくい
  • ボトルネックが負荷テストツール側になっていないか確認しよう
    • CPU/メモリ/トラフィックなど

11 of 11

まとめ

Tsungはいいぞ