Help us understand the problem. What is going on with this article?

Python製負荷試験ツールLocustで、分散負荷試験環境を準備する

More than 5 years have passed since last update.

Locustでも、Jmeterのようなmaster×1-slave×N環境を準備できるということで、実際に分散負荷試験環境を構築するまでのメモ

参考サイト

Locust なる load testing tool
Python 製の負荷試験ツール Locust を試してみた
Running Locust distributed

Locustインストール

pipのインストール作業は割愛。
Locust自体のインストールは以下の2つがあれば十分なので、非常に簡単。

pip install pyzmq
pip install locustio

pyzmqをインストールせずにLocustを起動すると、以下のようなWARNINGが出力される。

UserWarning: WARNING: Using pure Python socket RPC implementation instead of zmq. If running in distributed mode, this could cause a performance decrease. We recommend you to install the pyzmq python package when running in distributed mode.
warnings.warn("WARNING: Using pure Python socket RPC implementation instead of zmq. If running in distributed mode, this could cause a performance decrease. We recommend you to install the pyzmq python package when running in distributed mode.")

なお、環境によっては、pyzmqインストール時に、

gcc: error trying to exec 'cc1plus': execvp: そのようなファイルやディレクトリはありません

というエラーが出る時があるので、こういったときは yum install gcc-c++で必要なコンパイラをインストールしてあげる。

Locust設定

master-slave間は、ポート5557,5558を空けておく(デフォルト)

テストシナリオ準備

LocustはPythonでシナリオを記述できるということが、JmeterのXMLよりも開発者に優しい仕様。
今回は分散負荷試験環境を準備するまでがメインなので、サイトに直アクセスするだけのテストシナリオを準備した。

test.py
from locust import HttpLocust, TaskSet, task

class MyTaskSet(TaskSet):
    @task(1)
    def index(self):
        self.client.get("/")

class MyLocust(HttpLocust):
    task_set = MyTaskSet

Locust起動

  • master(10.127.29.162)

# locust -f test.py -H http://www.example.com --master
[2014-07-21 13:16:51,592] ip-10-127-29-162/INFO/locust.main: Starting web monitor at *:8089
[2014-07-21 13:16:51,596] ip-10-127-29-162/INFO/locust.main: Starting Locust 0.7.1

  • slave(10.172.132.249)

# locust -f test.py -H http://www.example.com --slave --master-host=10.127.29.162
[2014-07-21 13:17:07,447] ip-10-172-132-249/INFO/locust.main: Starting Locust 0.7.1

メモ

slaveの接続に成功すると、master側に以下のようなログが出力される。

[2014-07-21 13:17:07,454] ip-10-127-29-162/INFO/locust.runners: Client 'ip-10-172-132-249_5f40fc0bbaf6951a803e51d16dea946e' reported as ready. Currently 1 clients ready to swarm.

slaveがmasterから外されたときは、以下のようなログが出力される。

[2014-07-21 13:22:24,523] ip-10-127-29-162/INFO/locust.runners: Client 'ip-10-172-132-249_5f40fc0bbaf6951a803e51d16dea946e' quit. Currently 0 clients connected.

Locust起動画面

スタンドアローンでの起動画面
スクリーンショット 2014-07-21 13.43.12.png

master-slaveでの起動画面(右上にslaveの数が記載される)
スクリーンショット 2014-07-21 13.49.11.png

Locustの負荷試験中の画面
スクリーンショット 2014-07-21 13.50.25.png

まとめ

起動オプションで、Locustの分散負荷試験環境が準備できた。
他の方が書いているように、Jmeterほど高機能さはないけど、簡単な負荷試験にはちょうどよさそう。
個人的には、以下の項目に該当するなら、Locustでの負荷試験を検討してもよいのではないかと思われる。

  • JmeterのJavaヒープサイズまわりのチューニングが面倒くさい
  • XMLでテストシナリオを管理したくない(≒Pythonで書きたい)
  • Webで負荷がけ状況を把握したい(Jmeterのためだけに、X11設定するのが面倒くさい)
  • 豪華なグラフなど、Jmeterほどしっかりした試験結果は不要
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away