В клиенте python
grpc
, вызывающем сервер scala
grpc
, я получаю много ошибок с превышением срока.
Я сообщаю о показателях как от клиента, так и от сервера, и у меня большая разница между временем, сообщаемым сервером, и временем, сообщенным клиентом, которое, я не думаю, может быть объяснено только задержкой в сети (так как разница велика). Возвращаемые объекты имеют одинаковый размер, я бы предположил, что время сериализации незначительно по сравнению с сетевым временем.
Я установил тайм-аут на 20 мс
Мой код клиента прост:
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
, но, как уже упоминалось, достиг 20% времени ожидания при 20ms
Есть ли способ отладить основную причину этой проблемы, то есть ведение журнала низкого уровня и т. Д .?