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