Утечки памяти в службе Windows, процесс IIS не умирает - PullRequest
2 голосов
/ 08 апреля 2019

В настоящее время я работаю над службой мониторинга работоспособности, которая будет звонить на каждый веб-сайт, размещенный на данном компьютере.То, что он делает, является базовым для того, чтобы он работал на всех размещенных веб-сайтах, совершал вызов на компьютер через HttpClient для каждого и сохранял их текущий статусный ответ в базе данных.Проблема заключается в том, что эта служба при запуске создает несколько рабочих процессов IIS, которые просто не исчезают, а использование памяти увеличивается на 1% каждые несколько минут.Я почти уверен, что это не случайно, я искал много разных тем в отношении этой проблемы, но не смог найти результат, который бы сработал для меня. Есть идеи, как решить эту проблему?Вот выдержка из кода, который я использую:

        public void PingWebsites(List<Website> websites)
    {
        using (var client = new HttpClient())
        {
            for (int i = 0; i < websites.Count(); i++)
            {
                {

                    if (!websites[i].Environment.Contains("CI"))
                    {
                        Task<HttpResponseMessage> response = null;
                        try
                        {
                            response =  client.GetAsync(websites[i].Address);

                            if (!response.Result.IsSuccessStatusCode)
                            {
                                SaveStatus(websites[i].ID, 0);

                            }
                            else
                            {
                                SaveStatus(websites[i].ID, 1);
                            }

                        }
                        catch (Exception e)
                        {
                            SaveStatus(websites[i].ID, 0);
                        }
                        finally {
                            if (response != null)
                            {
                                response.Dispose();
                            }
                        }
                    }
                }
            }
        }
    }

Я также искал возможность ошибки таймера и вызова sql, но я считаю, что это больше проблема сHttpClient.

РЕДАКТИРОВАТЬ: Я также пытался использовать уникальный экземпляр HttpClient, но потребление памяти было таким же, все больше и больше потребляется с течением времени, так что это не моя текущая проблема.

1 Ответ

0 голосов
/ 18 апреля 2019

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

...