はじめに
前回は最大接続数や増加人数を変更してRPSの向上を図っていたが、
CPUリソースが原因か思うようにいかなかった。
今回はmaster-slave構成でlocustを実行することで
CPUリソース問題に対処していく。
関連記事
【locust】負荷試験ツールLocustを使ってローカルPCで一万RPSを目指す(1)
【locust】負荷試験ツールLocustを使ってローカルPCで一万RPSを目指す(2)
【locust】負荷試験ツールLocustを使ってローカルPCで一万RPSを目指す(3)
【locust】負荷試験ツールLocustを使ってローカルPCで一万RPSを目指す(4)
【locust】負荷試験ツールLocustを使ってローカルPCで一万RPSを目指す(5)
【locust】負荷試験ツールLocustを使ってローカルPCで一万RPSを目指す(6)
実行環境
実行環境は主に以下のようになります。
- Mac Studio(2022) Apple M1 MAX メモリ32GB GPU24コア <= この記事使用
- MacBook Pro(2020) M1 メモリ16GB GPU 8コア
- MacBook Pro(2017) intel core i5 メモリ8GB GPU2GB?
- Python 3.9.13 (web api server 構築のため それぞれのデバイスに環境構築した)
- pyenv(必須ではない)
環境構築
前前回の記事をご参考ください。
【locust】負荷試験ツールLocustを使ってローカルPCで一万RPSを目指す(2)
master-slave構成とは
locustの機能で複数プロセスを協調動作させることで、並列化によりテスト対象ホストに大きな負荷をかけることができます。
この機能を使うことでCPUへの負荷を分散することができる。
実装
master-slave構成で実行するためにdockerを使って
一つのmaster用のコンテナと複数のslaveコンテナを立ち上げ並列実行を行う。
マスターとして実行するコンテナではlocust実行のオプションに–masterをつける。
slaveとして実行するコンテナではオプションに–slaveをつける。
それらを記述したものが、docker-compose.ymlである。
実行
1 |
docker-compose up --scale worker=1 |
を実行。
workerがslaveの数を表している。
workerの数を増やすことで、実行スレッドを増加させて負荷を分散させることができる。
右上のworkersの数が1となっていることがわかる。
実行結果
- 最大接続人数 = 10000
- 1秒あたりに増加するユーザー数 = 1000
で固定して、slaveの数を1ずつ増やして実行する
前回のmaster-slave構成なしの状態ではRPSは約2000近くであった。
worker = 1
約1900RPSくらい master-slave構成前より減少している。
worker = 2
約2200RPSくらい master-slave構成前より僅かに改善。
worker = 3
約2600RPSくらい master-slave構成前よりさらに改善。
master = 4
約2600RPSくらい これ以上は改善できないか?
master = 8
大幅に数をslaveを増やして実行
約2700RPSくらい 少しだけ改善した。
これ以上slaveを増加させもあまり変化はなかった。
次に
CPUリソース不足は改善できたように見えるが、RPSは最大でも約2700が限界であった。
次は、RPS向上の可能性として、api serverとlocust 実行のデバイスを分けてみて検証を行ってみようと思う。
serverとしての処理とリクエストを送信する処理を両方とも同じデバイスで行っているため、
どちらかの処理の負荷が原因でRPSを悪化させているかもしれないため、次回はこの検証を行う。
【locust】負荷試験ツールLocustを使ってローカルPCで一万RPSを目指す(5)
コメント