我在python
grpc
客户端调用scala
grpc
服务器时遇到了很多截止日期超出错误。
我正在报告来自客户端和服务器的指标,并且我在服务器报告的时间与客户端报告的时间之间存在很大的差异,我认为这不能仅通过网络延迟来解释(因为方差很大)。返回的对象大小相似,我认为与网络时间相比,序列化时间可以忽略不计。
我将超时设置为20ms
我的客户端代码很简单:
self.channel = grpc.insecure_channel(...)
self.stub = MyService_pb2_grpc.MyServiceStub(self.channel)
timeout = 0.02
try:
start_ms = time.time()
grpc_res = self.stub.getFoo(Request(...), timeout=timeout)
end_ms = time.time()
total_duration_ms = int((end_ms - start_ms) * 1000)
....
except Exception as e:
status_code = str(e.code()).split('.')[1]
logger.error('exception ....: %s', status_code) # around 20% deadline exceptions
我的服务器代码平均报告5毫秒,客户端代码平均报告7ms
,但如上所述,在20ms
达到20%的超时
有没有办法调试此问题的根本原因,即较低级别的日志记录等?
您可以尝试在环境变量下运行:GRPC_VERBOSITY=DEBUG GRPC_TRACE=all
https://github.com/grpc/grpc/blob/master/doc/environment_variables.md