woshidan's blog

そんなことよりコードにダイブ。

AWS DevDay Tokyo 2018 LT大会に「AWSを用いたWebサービスの負荷試験のTips」というテーマで参加してきました

9月にLTのCFPの公募があり、これはいい勉強になるだろうということで応募したら通ったのでわたわたしながら準備していました。

speakerdeck.com

以下、とっちらかっていますが、自分用のメモ兼補足です。

  • JMeterが同時に1000スレッドを立ち上げたらフリーズした件
    • JMeterJava製の負荷試験用ツールなんですが、2~3GHzの1つのクライアントだと同時に300~600くらいまででWebサーバの場合は例外*1とのことですが、約3GHzの仕事用MBPだとこの辺で止まりました。メモリじゃなくてクロック数書いた方がよかったかもです
    • 実際のテストケースでは、一度に立ち上げるスレッド数を制限して、かわりに短いテストシナリオを短時間でたくさんループして1分あたりのスレッド数*2を増やしています
  • 負荷用クラスタの構成あたりの話について
    • 3/10の量のリクエストが送れるかどうかのテストをしていた際に心配していたこと
      • これで3/10のリクエスト数が送れなかったらAWSアカウントで利用できるEC2のインスタンスタイプごとの制限台数*3にひっかかるからインスタンスタイプあげなきゃ...
      • マスターとスレーブの間の通信でマスターが詰まらないか
        • JMeterのスレーブはテストの最中、制御に必要な情報(グラフリスナーなどが必要とする情報も含むっぽい)をマスターに送っているので、それによってマスター/スレーブ間が詰まらないか*4
        • 結論からいうとCUIモードならだいたい大丈夫ではと思います
      • スレーブから対象クラスタへの通信でネットワーク帯域が詰まらないか
    • なぜEC2を利用しているのか
      • 並列数が欲しいだけならLambdaでもいいのでは、という感じなのですが、負荷試験で調べたいことにElastiCache, RDSとEC2のクラスタとの間のネットワーク転送量があり、ある程度キャッシュが効いた状態の様子を見たかったので
        • キャッシュが効くまでに5分くらい暖機数分をとりたかったことと
        • 上記の暖機をした上で本番に近い形でキャッシュが効くようなデータセットを続けて利用することを考えると、5分の稼働時間のLamdbaで設定やテスト用データの用意をするのはややこしそうです。EC2なら動かしっぱなしでいいので
        • ランダムだったり固定データだったらLambdaでもよさそう
  • 負荷試験用環境のセットアップについて*5
    • ストレージ容量が4桁GiBになってくるとバックトラック(弊社の試験時にうまくいかず。。)がうまくいかないこともあるみたいですね
    • 書いていない工夫としてはバッチの結果が入っているRedisがあって、そのデータを用意するため、バッチの実行時間のAuroraのスナップショットとバッチ実行後のRedisのスナップショットを用意していました
      • 試験当時はAuroraが停止できなかったのでクローンでインスタンス立ち上げた後停止させるわけにはいかなかったので。。

現場からは以上です。

あわせて読みたい

dev.classmethod.jp

*1:https://jmeter.apache.org/usermanual/jmeter_distributed_testing_step_by_step.pdf

*2:JMeter(に限らないかもですが)での同時に動かすスレッド数はだいたい同時にアクセスしているユーザ数みたいな感じ

*3:https://aws.amazon.com/jp/ec2/faqs/#How_many_instances_can_I_run_in_Amazon_EC2

*4:https://jmeter.apache.org/usermanual/jmeter_distributed_testing_step_by_step.pdf

*5:質問されたのですが、試験環境のセットアップも自分でやってました。だいなみっく!