Слишком много RPC-соединений закрывают веб-сокет

Слишком много RPC-соединений закрывают веб-сокет

Несколько серверов подключены через RPC. Бывают случаи, когда приложения в ОС имеют слишком много вызовов RPC, что приводит к закрытию сети. Каков наилучший способ отладки или настройки моей ОС?

"msg":"sending ping message: write tcp 127.0.0.1:36802->127.0.0.1:1234: use of closed network connection"
"msg":"handle me:write tcp4 127.0.0.1:1234->127.0.0.1:56244: write: broken pipe"

решение1

Вы не упоминаете, какие меры по устранению неполадок вы предприняли, чтобы прийти к выводу, что это связано со слишком большим количеством вызовов RPC, или какие-либо подробности о состоянии сетевых подключений в момент сбоя. Я предполагаю, что эта ошибка возникает из-за исчерпания портов из-за отсутствия пула подключений.

Для проверки исчерпания портов используйте netstat, чтобы получить состояние портов на сервере. Если указано чрезмерное количество портов, скорее всего, у вас проблема с исчерпанием портов.

gRPC автоматически объединяет соединения, однако плохо написанный код может помешать этому функционировать должным образом, чрезмерно создавая новые каналы gRPC вместо повторного использования существующих. Я ссылался на документацию Microsoft, так как в ней есть описание того, как создание новых каналов приводит к созданию новых соединений HTTP/2.

Чтобы исправить это, вам придется оценить свой код и изменить его для более целесообразного повторного использования каналов.

Лучшие практики производительности с gRPC

Канал gRPC следует использовать повторно при выполнении вызовов gRPC. Повторное использование канала позволяет мультиплексировать вызовы через существующее соединение HTTP/2.

Если для каждого вызова gRPC создается новый канал, то время, необходимое для завершения, может значительно увеличиться. Каждый вызов потребует нескольких сетевых циклов между клиентом и сервером для создания нового соединения HTTP/2:

Лучшие практики производительности

Всегда, когда это возможно, повторно используйте заглушки и каналы.

При этом вы можете рассмотреть сокеты домена Unix вместо сокетов TCP. Если эти приложения в конечном итоге будут работать распределенно на нескольких машинах, вам следует придерживаться сокетов TCP. Если они всегда будут работать на одной и той же машине, вам следует рассмотреть сокеты домена Unix.

Как создать службу GRPC через локальный сокет, а не через inet в scala/java

gRPC-сервер на Python с сокетом домена Unix

Связанный контент