-
背景
基于应用认证中心对HTTP与GRPC两种调用方式性能的对比,探索一个既支持HTTP,又支持GRPC的压测工具。
-
压测工具体验
压测过程中体验了多种压测工具,最终采用JMeter作为最终压测工具进行测试,JMeter 简单易用,只需安装官方提供的插件即可支持 GRPC 的测试。其他还尝试了locust、go-stress-testing,locust自身功能仅支持HTTP接口的压测,若需支持GRPC需要重写源码,较为困难,且自己重写后性能是否准确无法确定。go-stress-testing 本身基于Go语言开发,具备HTTP 与 GRPC 测试功能,但测试 GRPC 时需要自己编写代码,且官方文档几乎未对该方面进行说明,不推荐。
-
JMeter 测试 GRPC 流程
-
官方插件引入
原生 JMeter 不支持 GRPC 的测试功能,需要额外引入官方提供的插件
将以上两个jar包放入JMeter安装目录下的 lib/ext文件夹内,后重启 JMeter 工具
windows 环境下如下:
-
-
-
测试 GRPC
-
创建 GRPC 执行任务
-
参数填写
-
Server Name or IP : 服务 IP
-
Port Number:开放的 RPC 端口号
-
Proto Root Directory:proto文件所在的文件夹
-
Full Method:Proto 文件中定义的 rpc service 接口,可通过点击 Listing 自动识别
-
Deadline In Millisecond 与 Channel Await Termination In Millisecond:压测环境设1000,可能 QPS 高时出现大量超时,建议设大点
-
Send JSON Format With the Request:请求携带的参数,点击 Listing 后自动识别相应格式。需仔细检查格式是否有误,如上图 signHeaders 应为 map 类型,但是却自动识别成了数组+map的类型
-
注意事项
由于对 GRPC 的压测需要识别 proto 文件,JMeter 在压测时会生成临时文件 protoc.exe 来对 proto 文件进行识别,若线程数设置很大,会生成大量临时文件,占据大量 C 盘临时的硬盘空间,JMeter关闭后会自动删除这些文件。但在测试过程中偶发 JMeter 关闭(可能是电脑死机后 JMeter 未正常关闭)后未自动删除这些临时文件,需手动删除。
Windows 环境下临时文件位于 C:\Users\*******\AppData\Local\Temp
Linux 测试机临时文件位于 /tmp
-