es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Uso de memoria no administrada en .Net Core gRPC

Tengo un servicio simple que escucha a RabbitMQ, llama a algunos servicios gRPC y realiza otras tareas como actualizaciones en la base de datos, etc. Comencé a notar que los pods de Kubernetes fallaban con una excepción OOM, así que eliminé toda la lógica del método “Consume” y del constructor del controlador, y comencé a agregar parámetros de nuevo uno por uno. Todo está normal hasta que paso mi cliente gRPC al constructor, entonces la memoria sin administrar comienza a aumentar con cada nuevo mensaje y nunca disminuye (el método “Consume” aún está vacío). ¿Alguna idea de qué estoy haciendo mal?

Mi cliente se agrega en Program.cs de la siguiente manera:

services.AddGrpcClient<notification.api.notification.notificationclient>(o =>
{
    o.Address = new Uri(sso.GrpcOptions.ApiBaseAddress);
})
.ConfigureChannel(c =>
{
    c.LoggerFactory = LoggerFactory.Create(logging =>
    {
        logging.AddConsole();
        logging.SetMinimumLevel(LogLevel.Warning);
    });
    c.HttpHandler = new SubdirectoryHandler(new HttpClientHandler(),
    sso.GrpcOptions.NotifSubdirectory);
});

Imagen de los resultados del perfilador dotMemory</notification.api.notification.notificationclient>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que puede haber una fuga de memoria en el cliente gRPC añadido en el archivo Program.cs. Es posible que el cliente no esté siendo correctamente liberado, lo que provoca que la memoria no administrada se acumule con cada nuevo mensaje. Una solución podría ser implementar IDisposable en el cliente gRPC y desecharlo manualmente cuando ya no sea necesario. Otra solución podría ser utilizar un perfilador de memoria, como el perfilador dotMemory mostrado en la imagen, para identificar dónde se está produciendo la fuga de memoria y realizar los ajustes necesarios para evitar que ocurra.

Comments are closed.