REF
[1] - Locust document
はじめで日本語で書きます。よろしくお願いします!
負荷試験の難しさ
- 一つのThreadで、Requestを送信するのは遅い。
- 複数のThreadでRequestを送信しても、一つのサーバー(パソコン)の性能は限界がある。
- 負荷の指定するのは難しい。
- ResponseTimeの統計はめんどい。(二番目を解決するため、複数サーバーが負荷をかけるともっとめんどくなる)
- Responseの内容をチェックしたいんですが、チェックするとRequestを送信するのが遅くなる。バランスが取りにくい。
- 自分でそんな負荷試験プログラム書きたくない。
Locustは以上の全ての問題を解決できます。
Locustの基本機能
Locustでは、何個ユーザー(client)、どうの頻度でどうのrequestが送信するのを設定できます。そして、実行している時現時点の秒間リクエスト数や、各リクエストの送信回数と平均・最大・最小ResponseTimeや、失敗したリクエストを表示することができます。
LocustのInstall
pipとeasy_installでinstallするのは一番やりやすい方法です:
WindowsとMacのInstall方法はこちらに参考してください。
Locustを起動する
Locustでの負荷試験は簡単です。
負荷試験を起動する必要なものは一つのpythonのTestCaseです。
LocustのTestCaseも書きやすいです。以下は典型的な例の一つ:
一つの注意点があります。 List 、 DictのようなMemberがTaskSetに入らない方がいいと思います。
そして、
を実行しで、Localhostの8089Portで負荷試験Consoleを訪問できます。そこで負荷が設定して試験を始めます。
Distributedでの負荷試験
Locustを使ったら、分散型負荷試験がやりやすいです。
まず複数のサーバーを用意して、そしてさきのscriptをサーバーにUploadします。
一つのサーバーは Master を担当し、他のサーバーが Slave になる。 Master が設定した負荷を Slave に配分して、 Slave がリクエストを送信します。
masterで:
slaveで:
分散型負荷試験をやる時、3つの注意点がある:
1. MasterとSlaveと通信があるので、FirewallやSecurityGroupを設定しないといけない。
2. 重い負荷をテストするとHealthCheckなどのため、同時でたくさんファイルがOpenするから、Ulimitを超えるかも。だから、MasterとSlaveの各サーバーで、Locustを起動する前にulimit 4096
をさきに実行します。
3. Defaultの8089のportを変更したいなら、Masterで--master-bind-port=5557
のように追加して、Slaveで--master-port=5557
を追加します。