12.gRPC压力测试工具ghz
本文主要介绍了 gRPC 压测工具 ghz 的安装、使用。
安装
可以直接在
releases
页面下载二进制文件后解压到系统 PATH 目录,也可以直接使用 go install github.com/bojand/ghz/cmd/...@latest 安装到 $GOPATH/bin 目录下。
使用方法
ghz 使用命令比较简单
$ ghz [<flags>] [<host>]
可用的选项可以使用 ghz –help 查看,也可以在 Options Reference 查看更详细的说明。
常用选项
基本参数
-config : 指定配置文件。
--proto : 指定 proto 文件。
--protoset : 指定 protoset 文件。
要创建 protoset 文件,可使用 protoc 来生成
$ protoc --proto_path=. --descriptor_set_out=bundle.protoset *.proto如果没有使用
--proto或--protoset选项,ghz会尝试执行 服务器反射 。
--call : 指定调用方法,格式为 package.Service.Method 或者 package.Service/Method。
-i/--import-paths : 指定 proto 导入路径列表,多个路径以逗号分隔。
--cacert : 指定用于验证服务器的受信任根证书的文件的路径,默认情况下,ghz 尝试使用系统的默认根证书创建安全连接。可以使用 -skipTLS 选项跳过 TLS 验证。
--cname : 验证 TLS 证书时服务器名称。
--cert : 指定客户端证书(公钥)的文件的路径,与 --key 联用。
--key : 指定客户端私钥的文件的路径。
--skipTLS : 跳过服务器证书链和主机名的 TLS 客户端验证。
--insecure : 使用明文和非 TLS 的连接。
--async : 尽量使请求异步。 在发送下一个之前不等待当前请求完成。
--authority : 用作 :authority 伪标头的值。 仅在使用 -insecure 时有效。
这貌似是一个 HTTP/2 的伪请求头,网上资料不多,也很少用到 HTTP/2 中的 HTTP 语义
-d : 请求参数,JSON 格式
-D : 以文件方式指定请求参数,值为 JSON 文件的路径
-o :输出路径,默认为 stdout
-O/--format :输出格式,可取值为 summary, csv, json, pretty, html, influx-summary, influx-details。 默认为 summary。
负载参数
-r/--rps :指定 RPS (Requests per second) 使ghz以恒定的 RPS 发送请求
--load-schedule :负载调度算法,可取值如下
- const : RPS 恒定 ,默认
- step : RPS步进增长
- line : RPS 线性增长
以下四个参数配合 --load-schedule 使用
--load-start :step、line 的起始 RPS
--load-step :step、line 的步进值或斜率值
--load-end :step、line 的负载结束值
--load-step-duration : 在每个阶段需要持续的时间
--load-max-duration :最大持续时间,到达则结束
并发参数
-c/--concurrency=50 : 为 const 并发调度并发运行的请求工作线程数。默认值为 50。
--concurrency-schedule : 并发调度算法,和 --load-schedule 相似。
以下参数配合 --concurrency-schedule 使用
--concurrency-start :起始并发数
–concurrency-end:结束并发数
--concurrency-step :并发数步进值
–concurrency-step-duration:在每个阶段需要持续的时间
--concurrency-max-duration :最大持续时间
一个测试示例
ghz --proto=/path/to/grpc-testing-0.0.1/grpc-testing-server/api/echo.proto \
-d '{"msg":"hello"}' \
--insecure \
-c 10 -n 1000 \
-o output.html \
-O html \
--call echo.echo.Echo \
127.0.0.1:8080