Intenté implementar mi ASP.NET Core API como un contenedor acoplable de Linux en un servidor EC2 CentOS. Ahora me enfrento a un problema de fuga de memoria porque mi aplicación consume mucha RAM.
El problema es que cuando trato de probar mi API con varias solicitudes simultáneas, el uso de RAM de mi API aumenta como una línea lineal, pero después de un período de tiempo sigue creciendo y no se libera (parece que la recolección de basura no funciona).
Mi API es simplemente una API CRUD simple y solo depende del núcleo de EF y del cliente RabbitMQ.
Cuando ejecuto la imagen de la ventana acoplable sin el límite de memoria, el uso de RAM sigue aumentando cada vez que llega la solicitud.
USO DE MEM / LÍMITE --------- % MEM
890,93 MB/ 15,21 GB --------- 5,xx%
Pero si configuro el límite de memoria en 300 MB, el uso de RAM aumenta a alrededor de 270 MB y se reduce a 150 MB.
Esto me confunde un poco. ¿Ese límite de MEM activa la recolección de basura para que se ejecute cuando el uso de RAM alcanza el tamaño límite? ¿Tendré que establecer también el límite de MEM en ENV de producción?
Aquí está mi DockerFile
FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base WORKDIR /app EXPOSE 80 FROM microsoft/dotnet:2.2-sdk AS build WORKDIR /src COPY "MyAPI.csproj" ./ RUN dotnet restore "MyAPI.csproj" COPY . . WORKDIR "/src" RUN dotnet build "MyAPI.csproj" -c Release -o /app FROM build AS publish RUN dotnet publish "MyAPI.csproj" -c Release -o /app FROM base AS final WORKDIR /app COPY --from=publish /app . ENTRYPOINT ["dotnet", "MyAPI.dll"]