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.

Fuga de memoria relacionada con OptionsMonitor y Serilog.

Tengo lo que parece ser una fuga de memoria en un servicio web de producción relacionado con OptionsMonitor y Serilog. Durante un período de aproximadamente 10 días, el uso de memoria aumenta gradualmente desde un punto de partida de ~200MB hasta ~1GB, momento en el cual alcanza los límites de Kubernetes y comienzan a lanzarse excepciones de falta de memoria. K8s luego reinicia el pod ya que se considera no saludable.

  • Imagen de Docker alpina de asp.net core 3.1
  • Serilog 2.9.0
  • Microsoft.Extensions.Logging 3.1.3
  • Funcionando en Amazon AWS EKS Kubernetes 1.20

Obtuve algunos volcados del contenedor de producción y pude analizarlos con la herramienta dotMemory de JetBrains. Está señalando a OptionsMonitor como el objeto con el tamaño de retención más grande. También se están reteniendo en memoria alrededor de ~300k instancias de Serilog.Core.Logger que están conectadas al evento onChange de OptionsMonitor que se dispara. Creo que esto ocurre cuando se actualiza la configuración. Aunque no hay nada que actualice explícitamente los archivos de configuración, así que no estoy seguro de por qué esto continúa disparándose. No estoy seguro de por qué estos objetos no se están liberando de la memoria. Aquí hay un par de capturas de pantalla de dotMemory, una con la visión general y otra con un gráfico de retención que muestra a Serilog.Core.Logger adjunto a OptionsMonitor. ¿Alguna idea de qué está sucediendo aquí?

Imagen 1 Imagen 2

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Basándonos en la información proporcionada y en el análisis realizado con la herramienta dotMemory de JetBrains, parece que la fuga de memoria está relacionada con OptionsMonitor y Serilog. El gráfico de retención muestra que hay numerosas instancias de Serilog.Core.Logger adjuntas al evento onChange de OptionsMonitor que se activan.

    Una posible causa de este problema podría estar relacionada con las actualizaciones de configuración. Es posible que los archivos de configuración se estén actualizando, lo que hace que se active el evento onChange y se retengan las instancias de Serilog.Core.Logger en memoria.

    Para resolver este problema, se recomienda investigar las actualizaciones de configuración y verificar si se están activando innecesariamente. Además, puede ser útil revisar el código que utiliza OptionsMonitor y asegurarse de que los objetos se estén eliminando correctamente. También puede ser útil actualizar a las últimas versiones de Serilog y Microsoft.Extensions.Logging para resolver este problema.

Comments are closed.