我有一个运行 5000 bidiStream gRPC 用户的场景,每秒增加 2 个用户,这是我当前的设置
val grpcConf = grpc(managedChannelBuilder(s"${url}").usePlaintext())
//.shareChannel
val settings_Result = grpc("name")
.bidiStream[RequestName, ResponseName](RelayServerGrpc.METHOD, "NameStream")
//exec scenario
exec(
httpconf.PaymentFinalizerProcess_Result
.connect
.header(metadataObject.Authorization)(s"Bearer ${metadataObject.TokenKey}")
.endCheck(statusCode is Status.Code.OK)
)
.exec(REST_API)
.exec(bidiStream_Complete)
通常我会在大约 1800 个用户(时间戳 900 秒)时开始出现
INTERNAL
错误,但是当我打开 .shareChannel
时,它会在 900 个用户(时间戳 450 秒)时更快出现。我已经用这两种设置测试了相同的场景大约 3-4 次,以确保原因是启用 .shareChannel
所以我想询问
.shareChannel
的效果,以了解更多并改进这个脚本,请帮助我。
如果使用
shareChannel
,则所有虚拟用户share
相同ManagedChannel
。
One
ManagedChannel
(大致)使用一个 TCP 连接来处理所有请求。
grpc 中的托管通道上有多个存根?
与 gRPC 的 TCP 会话
共享 TCP 连接可以降低资源消耗,因此可以达到更高的吞吐量。如果服务器处理大量连接的能力在负载测试中并不重要,这会很有用。
在您的情况下,您的服务器(或负载生成器)似乎无法在单个连接中处理大量请求。没关系,只是不要使用
shareChannel
选项。这样负载测试更加真实。