@Quttar

Почему при простом подключении Websocket утекает память?

У меня есть очень простое приложение состоящее из двух классов:
public class Program
    {
        public static void Main(string[] args)
        {
            var builder = WebApplication.CreateBuilder(args);
            builder.Services.AddMvc(options => options.EnableEndpointRouting = false);
            var app = builder.Build();

            app.UseWebSockets();
            app.UseMvc();
            app.Run();
        }
    }

    [Route("/ws")]
    public class WsController : Controller
    {
        private readonly ILogger _logger;

        public WsController(ILogger<WsController> logger)
        {
            _logger = logger;
        }

        public async Task<IActionResult> IndexAsync()
        {
            _logger.LogInformation($"Start WS; remote ip: {HttpContext.Connection.RemoteIpAddress}");
            if (HttpContext.WebSockets.IsWebSocketRequest)
            {
                using (WebSocket remoteHost = await HttpContext.WebSockets.AcceptWebSocketAsync())
                {
                    remoteHost.Abort();
                    _logger.LogInformation($"Execute WS; remote ip: {HttpContext.Connection.RemoteIpAddress}");
                }

            }
            return new EmptyResult();
        }
    }


Как видно, этот код занимается тем, что принимает запросы и сразу их сбрасывает. В приложение постоянно приходят запросы на подключение по WebSocket, некоторые из которых могут нести произвольные данные.

Я запускаю приложение в IIS, в модели выполнения Out of process, версия фреймворка: net7. В процессе w3wp.exe который связан с этим приложением постепенно утекает память, и ее потребление ни как не ограничивается, она может за день так занять гигабайт.

Если не принимать запросы с помощью AcceptWebSocketAsync(), то утечки не происходит. Фактически после вызова этой функции я произвожу очистку связанных ресурсов, но почему тогда после окончания обработки запроса IIS все равно хранит по видимому какие-то данные связанные с этим запросом?

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

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы