gRPC 基准和负载测试
gRPC 性能压测
概要
使用gRPC开发完成后,我们需要对其进行基准测试和负载测试。这里主要是对gRPC服务器端的负 载进行测试。
这里我们推荐一个工具 ghz.
ghz 就是这样的负载测试工具,它是使用 Go 语言实现的命令行工具。它能够在本地对服务进行测试和调试,也能用在自动化持续集成环境中,实现性能回归测试.
安装 ghz
macOS(Homebrew)
brew install ghz
编译安装
git clone https://github.com/bojand/ghz
cd ghz
# 这里编译包含 ghz本身和ghz-web
make build
cp ./dist/ghz /usr/local/bin/
# 查看帮助
ghz -h
使用
A simple insecure unary call
ghz --insecure \
--proto ./helloworld/greeter.proto \
--call helloworld.Greeter/SayHello \
-d '{"name": "Eagle"}' \
-n 10000 \
-c 100 \
0.0.0.0:9090
输出结果
Summary:
Count: 10000
Total: 949.45 ms
Slowest: 44.86 ms
Fastest: 0.12 ms
Average: 4.36 ms
Requests/sec: 10532.46
Response time histogram:
0.118 [1] |
4.591 [6064] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎ ∎∎∎∎∎∎∎∎∎
9.065 [3006] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
13.539 [601] |∎∎∎∎
18.013 [239] |∎∎
22.486 [43] |
26.960 [19] |
31.434 [23] |
35.908 [3] |
40.381 [0] |
44.855 [1] |
Latency distribution:
10 % in 0.67 ms
25 % in 1.46 ms
50 % in 3.38 ms
75 % in 6.20 ms
90 % in 8.80 ms
95 % in 11.56 ms
99 % in 17.54 ms
Status code distribution:
[OK] 10000 responses
更多example可以查看 https://ghz.sh/docs/examples
结果输出到web查看
打开ghz-web控制台
./dist/ghz-web
# 可以看到web运行在80端口
...
⇨ http server started on [::]:80
...
控制台首页
新建项目
在web控制台创建一个项目,供下面使用。
ghz --insecure \
--proto ./helloworld/greeter.proto \
--call helloworld.Greeter/SayHello \
-d '{"name": "Eagle"}' \
-n 10000 \
-c 100 \
--tags '{"env": "staging", "created by":"Go Developer"}' \
--name 'Greeter SayHello' \
-O json \
0.0.0.0:9090 | curl -H "Content-Type:application/json" -XPOST -d @- "http://localhost:80/api/projects/1/ingest"
之后就可以在控制台查看,效果如下