gRPCをJMeterで負荷試験するまでの必要なこと
gRPCの負荷試験をやるタスクが降ってきたのでやり方をメモします。
1. gRPCのサンプルをダウンロードしDockerで実行
@sugiyama404(sugi 404)さんが書かれているDockerで始めるgRPCが手軽だったのでそのまま使わせていただきました。
$ git clone https://github.com/sugiyama404/practice_grpc.git
$ cd practice_grpc
$ docker compose up
Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them
[+] Running 3/3
⠿ Network practice_grpc_default Created 0.1s
⠿ Container server-grpc Created 0.3s
⠿ Container client-grpc Created 0.3s
Attaching to client-grpc, server-grpc
2. JMeterをインストール
JMeter gRPC Request で gRPC リクエストを送る方法とハマった点を参考にJMeterとプラグインをインストール。
JMeter gRPC Requestのプラグインをダウンロードし、jmeterを展開したディレクトリで展開。
3. JMeterを実行。
$ $JMETER_HOME/bin/jmeter.sh
WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release
WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release
WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release
WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release
================================================================================
Don't use GUI mode for load testing !, only for Test creation and Test debugging.
For load testing, use CLI Mode (was NON GUI):
jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
& increase Java Heap to meet your test requirements:
Modify current env variable HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m" in the jmeter batch file
Check : https://jmeter.apache.org/usermanual/best-practices.html
================================================================================
4. JMeter設定
テスト計画に 追加 > Threads > スレッドグループ でスレッドグループを追加。
スレッドグループで 追加 > サンプラー > GRPC Request でGRPC Requestを追加。
GRPC Requestを選択し、Proto Root Directoryに先ほど git clone したディレクトリ配下のpractice_grpc/server/go_grpc/proto
を指定。
Listingボタンを押下して、helloworld.Greeter/SayHelloを選択。
Send JSON Format With the Requestにリクエストの中身が表示される。
docker psを実行してサーバーのポートを調べる。8080です。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f042f5d39bbd practice_grpc-server "bash" 54 minutes ago Up 54 minutes 0.0.0.0:8080->8080/tcp server-grpc
ff45f296cb40 practice_grpc-client "bash" 54 minutes ago Up 54 minutes
localhostの8080ポートでアクセスできるので、JmeterのWeb Server の Server Name or IPとPort Numberを設定してやる。
送信されたことの確認はサーバーのコンテナに入り、
$ docker exec -it server-grpc /bin/bash
次のコマンドを実行しておく。
root@f042f5d39bbd:/practice-grpc# cd go_grpc/
root@f042f5d39bbd:/practice-grpc/go_grpc# go run server/main.go
2023/11/07 08:09:28 server listening at 172.18.0.2:8080
2023/11/07 08:10:04 Received: yuki
2023/11/07 08:38:14 Received: Hello