gRPC C # Утечка памяти на сервере - PullRequest
1 голос
/ 28 октября 2019

Я использую сервер .NET Core gRPC, где возникают утечки памяти. В настоящее время я использую версию 1.22.1 Grpc на основе библиотеки на основе c.

Часто возникает следующая ошибка:

W1027 Grpc.Core.Server Исключительная ситуация при обработке RPC. `System.InvalidOperationException: операция недопустима из-за текущего состояния объекта. на Grpc.Core.Internal.AsyncCallServer. SendStatusFromServerAsync (Статус статуса, трейлеры метаданных, Nullable1 необязательныйWrite) в Grpc.Core.Internal.DuplexStreamingServerCallHandler2.HandleCall (ServerRpcNew newRpc, CompletionQueueSafeHandle * новый SQL-класс)1007 *

и

E1027 140088109414144 /var/local/git/grpc/src/core/ext/transport/chttp2/transport/chttp2_transport.cc:2823: ipv4: 10.132.15.236:6845: сторожевая собака Keepalive запущена. Закрытие транспорта.

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

Могут ли эти ошибки быть как-то связаны с утечкой памяти?

enter image description here ОБНОВЛЕНИЕ: Похоже, что проблема связана с неактивными TCP-соединениями. ,По умолчанию неиспользуемые TCP-соединения не удаляются в используемой нами версии gRPC. установив следующую опцию «grpc.max_connection_idle_ms» на несколько минут, количество соединений TCP перестает расти, и, таким образом, утечка памяти значительно уменьшилась.

...